为什么实体类重写toString后,可以打印对象?
一、背景
当一个类没有重写tostring方法时侯,该类就会继承Object类的tostring方法。
1.Object.toString():
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
通过例子测试出来:
//Student未重写toString方法
Student s = new Student();
System.out.println(s);
打印结果:
day627.serial.Student@2401f4c3
打印结果就是拼接了反射获得类名+类的哈希值
二、意义
那为什么会这样呢
我们从println的源码出发
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
可以很明显看出,让你输入一个Object x时候,x会被转成字符串。
我们进去valueOf()
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
这个method会将非空的类会调用它的toString方法。
所以,可以清楚看出 print(Object o)
会调用toString()