【发布时间】:2013-06-11 18:45:54
【问题描述】:
如果我正在打印该类的一个对象,那么它正在打印toString() 方法实现,即使我没有编写toString() 方法,那么实现是什么,它如何在内部调用toString()?
【问题讨论】:
-
打印
toString()方法实现是什么意思?
标签: java
如果我正在打印该类的一个对象,那么它正在打印toString() 方法实现,即使我没有编写toString() 方法,那么实现是什么,它如何在内部调用toString()?
【问题讨论】:
toString()方法实现是什么意思?
标签: java
你没有明确地调用toString(),但隐含地你是:
见:
System.out.println(foo); // foo is a non primitive variable
System 是一个类,具有static 字段out,类型为PrintStream。所以你正在调用PrintStream 的println(Object) 方法。
它是这样实现的:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
正如我们所见,它正在调用 String.valueOf(Object) 方法。
这实现如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
你看,toString() 被调用了。
【讨论】:
Java 中的每个对象 IS-A(n) Object 也是如此。因此,如果一个类没有提供 toString() 实现,则默认的 Object.toString() 会自动调用。
Object.toString() 的默认实现 只是打印对象的类名,后跟对象的哈希码,这不是很有帮助。因此,通常应该重写 toString() 以提供对象运行时状态的更有意义的字符串表示。
即使我没有编写 toString() 方法,那么实现是什么,它是如何在内部调用 toString() 的?
toString() 是在某些编程情况下(例如,仅命名几个)
println()打印对象
Collection(在所有元素上调用toString())
strObj = "My obj as string is " + myObj;)
【讨论】:
所有东西都继承自 Object,所以如果你没有定义 Object 上的 toString,就会被调用。
【讨论】:
Object 类没有原始类型,但有包装器 - 查找 Integer、Double..
toString() 方法存在于 Object 类中,因此当您将 obj 放入 System.out.println(obj); 时,它会隐含地调用 Object 类中存在的 toString() 方法,因为每个用户创建的类都将隐式继承 Object 类因此,作为您新创建的类,这意味着 toString() 在您的类中可用,因此它将打印例如:“PkgNamePackage.Classname@12cf4” 但是,如果您明确覆盖 toString 方法并提供您自己的实现,那么它将写入您在 Overriden tostring method(); 中提供的字符串; 例如:
public class DogArray {
@Override
public String toString() {
return "Im the newly created Object";
}
public static void main(String args[]) {
DogArray d1 = new DogArray();
System.out.println(d1);
}
}
output: Im the newly created Object
【讨论】:
在 java 中,对象类是每个类的超类。每当您将参数传递给 system.out.println 内部对象类到字符串方法时,它将被执行。它返回给定的类名@引用值,但根据我们的应用程序要求对象类到字符串方法将在集合和字符串类中覆盖。它返回它们的内容。
【讨论】: