如果我正在打印类的对象,那么它正在打印toString()方法实现,即使我没有编写toString()方法,那么实现是什么,它是如何在toString()内部调用的?
jlo*_*rdo 47
你没有明确地打电话toString(),但暗示你是:
看到:
System.out.println(foo); // foo is a non primitive variable
Run Code Online (Sandbox Code Playgroud)
System是一个类,有一个static字段out,类型PrintStream.所以你正在调用a的println(Object)方法PrintStream.
它实现如下:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
Run Code Online (Sandbox Code Playgroud)
正如我们所见,它正在调用该String.valueOf(Object)方法.
这实现如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Run Code Online (Sandbox Code Playgroud)
在这里你看,这toString()就是所谓的.
Java IS-A(n)中的每个对象Object也是如此.因此,如果toString()类没有提供实现,则会Object.toString()自动调用默认值.
Object.toString()的默认实现简单的打印对象的类名,后跟该对象的散列码这是不是非常有帮助.因此,通常应该重写toString()以提供对象运行时状态的更有意义的String表示.
即使我没有编写toString()方法,那么实现是什么,它是如何在内部调用toString()的?
toString()是为数不多的方法(如一个equals(),hashCode()等)被隐式调用下一样(只是命名一些)某些方案的情况下
println()Collection对象(toString()在所有元素上调用)strObj = "My obj as string is " + myObj;)| 归档时间: |
|
| 查看次数: |
18539 次 |
| 最近记录: |