直接列印物件參考(如 System.out.println(obj))時,預設會呼叫 Object.toString(),輸出格式為 類別名稱@雜湊碼(例如 test.A@15093f1),這對除錯幾乎無用。正確做法是覆寫 toString(),回傳具備業務意義的字串表達。
class A {
int a, b;
// getter/setter 略
}
public class Test {
public static void main(String[] args) {
A obj = new A();
obj.setA(8);
obj.setB(9);
System.out.println("a.a: " + obj.a); // 8
System.out.println("a.b: " + obj.b); // 9
System.out.println(obj); // test.A@15093f1 ← 無意義
}
}
class A {
int a, b;
// getter/setter 略
@Override
public String toString() {
return "A.a:" + a + ";A.b:" + b;
}
}
// 執行結果:
// a.a: 8
// a.b: 9
// A.a:8;A.b:9 ← 清楚可讀
ClassName{field1=value1, field2=value2} 風格,或使用 Objects.toStringHelper(this)(Guava) / ToStringBuilder(Apache Commons Lang)自動產生。Generate → toString() 功能,可依專案編碼風格模板快速完成。若專案引入 Lombok,僅需在類別上加 @ToString 註解即可自動產生標準實作,並支援 exclude、includeFieldNames 等細節控制:
@ToString(exclude = "password")
public class User {
private Long id;
private String username;
private String password;
}