【发布时间】:2013-05-30 16:11:23
【问题描述】:
我有以下代码
public class DriverTester {
public static void main(...){
// test empty constructor
Person p1 = new Person();
System.out.println("p1: " + p1);
}
}
public class Person {
private String name;
// Empty constructor
public Person () {
}
// getter avoided for simplicity
public String toString() {
return "Mr.or Ms. "+this.name;
}
}
它编译、运行成功并显示“Mr or Mrs null”。所以,这就是调用toString 方法的结果。
我不明白 print line 方法的语法。只是对象的名称p1 是如何运行给定方法的。它如何知道运行哪种方法?语法不应该是
System.out.println("p1: " + p1.getName());
或
System.out.println("p1: " + p1.toString());
感谢您的澄清
【问题讨论】:
-
所有对象都是
Object类的子对象,该类具有toString()方法。println()方法接受Object。所以它知道它可以在参数上调用 toString()。字符串连接也是如此。 -
每当在
String上下文中使用对象时,就像在println中一样,它的toString()方法就会被调用。你是对的,System.out.println("p1: " + p1.toString())会更详细和正确。