为什么输出对象时,调用toString()?
2017-09-13 21:59
169 查看
在Java中,所有的对象都是继承自Object,自然继承了toString方法,在当使用System,out.println()里面为一个对象的引用时,自动调用toString方法讲对象打印出来。如果重写了tostring方法则调用重写的toString 方法。
因为System.out.println()的这个方法源码中调用了String.valueOf(Objec o),
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
而String.valueOf(x)的源码就是去调用该对象的toString()方法,源码如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
例如一下例子(同事注意String StringBuilder 以及StringBuffer的区别。以下使用的是StringBuilder)。
import java.util.Random;
public class UsingStringBuilder {
public static Random random = new Random(47);
public String toString() {
StringBuilder result = new StringBuilder("[");
for(int i=0;i<25;i++) {
result.append(random.nextInt(100));
result.append(",");
}
result.delete(result.length()-2, result.length());
result.append("]");
return result.toString();
}
public static void main(String[] args) {
UsingStringBuilder u = new UsingStringBuilder();
System.out.println(u);
}
}
输出结果:[58,55,93,61,61,29,68,0,22,7,88,28,51,89,9,78,98,61,20,58,16,40,11,22,]
因为System.out.println()的这个方法源码中调用了String.valueOf(Objec o),
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
而String.valueOf(x)的源码就是去调用该对象的toString()方法,源码如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
例如一下例子(同事注意String StringBuilder 以及StringBuffer的区别。以下使用的是StringBuilder)。
import java.util.Random;
public class UsingStringBuilder {
public static Random random = new Random(47);
public String toString() {
StringBuilder result = new StringBuilder("[");
for(int i=0;i<25;i++) {
result.append(random.nextInt(100));
result.append(",");
}
result.delete(result.length()-2, result.length());
result.append("]");
return result.toString();
}
public static void main(String[] args) {
UsingStringBuilder u = new UsingStringBuilder();
System.out.println(u);
}
}
输出结果:[58,55,93,61,61,29,68,0,22,7,88,28,51,89,9,78,98,61,20,58,16,40,11,22,]
相关文章推荐
- java直接输出对象默认调用toString()
- java在调用System.out.println()打印一个新new的对象时,为什么会调用toString方法?
- java在调用System.out.println()打印一个新new的对象时,为什么会调用toString方法?
- java数组的输出时为什么要调用Arrays.toString方法
- Object之魔术函数__toString() 直接输出对象引用时自动调用
- 当使用System,out.println()打印一个对象是自动调用toString方法
- 对象指针为NULL,为什么还是可以调用成员函数
- 函数传对象调用,为什么值没有发生变化?
- 创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法,而被子类重载的方法不会调用?
- 为什么参数是对象时还要调用拷贝构造函数?
- PHP 为你提供一个叫__toString() 的函数,你可以用它来返回表示对象的字符串信息,而且一旦定义它,打印命令将调用它并打印出返回的字符串。
- JS会自动调用toString()方法来显示日期(即“Date对象的内容”)
- 调用Thread类的方法:public final String getName() 为什么得到的线程对象的名称默认是:Thread-0、Thread-1、Thread-2、...呢?
- 为什么toString 方法会自动被调用
- 为什么调用Object的clone方法却可以使得自己类中的对象被clone呢?
- 我们在创建对象的时候,为什么要调用构造方法并且要给构造方法传入实参???
- 5.编写一个程序,有两个类,其中类MAX中具有两个方法,方法名都是max,一个方法能够比较两个数的大小,另外一个方法能够比较三个数的大小。在另外一个类中创建对象,调用这两个方法,分别输出两组数:2、6
- 为什么单例对象的并发调用需要同步?
- 空类生成对象输出的结果是什么? toString()输出 覆写Object toString()方法输出的结果是什么
- 重写toString方法输出对象信息