為自定義物件新增 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 方法。