关于toString();求高手解答!
importjava.util.*;publicclassTestSort{publicstaticvoidmain(Stringargs[]){ArrayList<In...
import java.util.*;
public class TestSort
{
public static void main(String args[])
{
ArrayList<Integer> a = new ArrayList<Integer>();
a.add(new Integer(1));
a.add(new Integer(3));
a.add(new Integer(2));
System.out.println(a.toString()); //System.out.println(a);
Collections.sort(a);
System.out.println(a.toString()); //System.out.println(a);
}
}
上面两行输出代码如果换成注释的代码在输出结果上完全相同,但是书上的例子是前者,请问为什么要用a对象调用toString()函数然后再输出呢?直接输出System.out.println(a);这样不可以吗?调用toString()有什么特别意义吗? 展开
public class TestSort
{
public static void main(String args[])
{
ArrayList<Integer> a = new ArrayList<Integer>();
a.add(new Integer(1));
a.add(new Integer(3));
a.add(new Integer(2));
System.out.println(a.toString()); //System.out.println(a);
Collections.sort(a);
System.out.println(a.toString()); //System.out.println(a);
}
}
上面两行输出代码如果换成注释的代码在输出结果上完全相同,但是书上的例子是前者,请问为什么要用a对象调用toString()函数然后再输出呢?直接输出System.out.println(a);这样不可以吗?调用toString()有什么特别意义吗? 展开
5个回答
展开全部
我们看一下jdk 的源码,分析一下这个System 类
这个类是这样定义的。
* @author unascribed
* @version 1.162, 04/01/09
* @since JDK1.0
*/
public final class System
这是个 最终类,是不能被继承的。
其中有 in 方法 和 out 方法
* @see java.io.PrintStream#println()
* @see java.io.PrintStream#println(boolean)
* @see java.io.PrintStream#println(char)
* @see java.io.PrintStream#println(char[])
* @see java.io.PrintStream#println(double)
* @see java.io.PrintStream#println(float)
* @see java.io.PrintStream#println(int)
* @see java.io.PrintStream#println(long)
* @see java.io.PrintStream#println(java.lang.Object)
* @see java.io.PrintStream#println(java.lang.String)
*/
public final static PrintStream out = nullPrintStream();
这个方法的返回值类型是 PrintStream 类型。
那我们再看一下PrintStream 类,这个类里面我们找 println()方法
/**
* Prints a String and then terminate the line. This method behaves as
* though it invokes <code>{@link #print(String)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>String</code> to be printed.
*/
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
/**
* Prints an Object and then terminate the line. This method calls
* at first String.valueOf(x) to get the printed object's string value,
* then behaves as
* though it invokes <code>{@link #print(String)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>Object</code> to be printed.
*/
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
这个 println()方法,当参数类型不同 方法也不同。这是利用了java 的重载。
当传入一个 String 类型的时候,直接print 然后换行。
当传入一个 object 类型的时候 先要转换为String 。
对于你这个列子 是没有什么区别的。因为你的 collection 里面传入的是基本数据类型。
当然 toString 也是通过 String.valueOf(Object) 转化的。单不是基本数据类型,你要打印。就要迭代ArreyList 使用 get( i) 得到基本类型来打印。
希望对你有帮助,多看源码分析。
展开全部
直接输出a 输出的是一个数组对象 a可以直接取值比喻 a.get(0); 这样可以输出里面第一个数
a.toString() 就是把a转成一个普通的字符串 就和我们手动输入的[1,2,3] 是一样的 就不能直接里面的值了
a.toString() 就是把a转成一个普通的字符串 就和我们手动输入的[1,2,3] 是一样的 就不能直接里面的值了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
toString() 方法时 Object父类的一个方法 这个方法的作用就是 把你的 a 转换成 String类型的 因为我输出的时候 一般都是 String 类型的 习惯上把不是 String类型的后面加个toString() 输出效果是一样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没意义,因为System.out.println()就是调用toString()方法的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
.............................................
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询