我有一个问题,为什么在main方法调用printPersonPrinting()方法时隐式调用toString()方法.
public class PersonPrinting { private String name; private int age; public PersonPrinting(String aName, int anAge) { name = aName; age = anAge; } public String toString() { return name + " " + age; } public void printPersonPrinting() { System.out.println(this); } public static void main (String [] args) { PersonPrinting p = new PersonPrinting("Dan",10); //printPersonPrinting is called, but toString isn't. //But the output is formatted by toString method. p.printPersonPrinting(); } }
此代码的输出是 - > Dan 10
谢谢!!
这就是Java的工作方式.默认情况下,在其param对象上System.out.println()
调用该toString()
方法以将其转换为其字符串表示形式.
如果对象的类没有覆盖该toString()
方法,则可能会得到类似的结果className@someHexadecimalNumber
.(这是类中toString()
方法的默认实现的结果Object
)
因为System.out.println(this);
调用
String.valueOf(this)
反过来打电话
this.toString()
基本上就是这样System.out.println(this.toString());
.
System.out
是一个PrintStream
所以你可以看到PrintStream.println(Object)
哪些(部分)
此方法首先调用
String.valueOf(x)
获取打印对象的字符串值,然后表现为调用print(String)
然后println()
.