在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();
}对于 System.out.println(this):
this是这个类的引用, 比如说
class A{
public void run(){
System.out.println(this);
}
public String toString() {
return "hello";
}
}那么 System.out.println(this) 将打印A类自身引用的toString方法,如列,打印hello; 如果自身没有实现,则打印的是父类Object的toString方法;getClass().getName() + "@" +Integer.toHexString(hashCode()); 打印的是“类名@hascode”
版权声明:本文为qq_40395278原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。