直接列印物件 System.out.println(emp) 會呼叫 toString(),輸出格式為 類名@十六進位hashCode;而 emp.hashCode() 回傳十進位整數。兩者本質相同,僅進制不同。
public class Test {
public static void main(String[] args) {
Emp emp = new Emp();
System.out.println(emp); // 等同 emp.toString()
System.out.println(emp.hashCode()); // 十進位
}
}
class Emp { String id; String name; }
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
hashCode() 依預設實作從記憶體位址衍生(JVM 相關),同一物件多次呼叫回傳相同值。toString() 將同一 hash 值轉為十六進位字串,前綴類名與 @。equals(),必須同步覆寫 hashCode() 以符合契約。理解此機制有助於除錯時正確解讀物件列印輸出。