为自定义对象添加 toString() 方法

假设你已定义以下 Person 类:

public class Person {

    String name;
    int age;
    
    public Person (int age, String name) {
        this.age = age;
        this.name = name;
    }
}

如果你实例化一个新的 Person 对象:

Person person = new Person(25, "John");

稍后在代码中使用以下语句来打印对象:

System.out.println(person.toString());

Ideone 上的现场演示

你会得到类似于以下的输出:

Person@7ab89d

这是 Object 类中定义的 toString() 方法的实现结果,Object 类是 Person 的超类。Object.toString() 的文件说明:

类 Object 的 toString 方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”以及对象的哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于值的字符串:

`getClass()`.getName() + '@' + Integer.toHexString(`hashCode()`)

因此,对于有意义的输出,你必须覆盖 toString() 方法:

@Override
public String toString() {
    return "My name is " + this.name + " and my age is " + this.age;
}

现在输出将是:

My name is John and my age is 25

你也可以写

System.out.println(person);

Ideone 上的现场演示

实际上,println() 隐含地在对象上调用 toString 方法。