在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”
本文介绍了Java中使用System.out.println(this)打印对象时,实际上是调用了对象的toString()方法。如果重写了toString方法,将打印自定义内容;否则,将默认打印Object类的toString方法,返回类名@hashCode的形式。
4053

被折叠的 条评论
为什么被折叠?



