在 Java 中,equals 方法常被初學者誤解。許多人以為它只是比較兩個對象的屬性值(如 name、age),但實際上它的運作機制更為關鍵:當你覆寫 equals 時,this 代表當前調用該方法的對象,而傳入的參數 obj 則是另一個待比較的對象。方法內部需顯式比較兩者的各個屬性,才能正確判斷邏輯上的相等性。
自定義的 equals 方法通常會先檢查引用是否相同、類型是否一致,再逐一比較關鍵字段。例如:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person other = (Person) obj;
return this.name.equals(other.name) && this.age == other.age;
}
這樣在比較 p1.equals(p2) 時,this 是 p1,obj 是 p2,雙方屬性值逐一比對,得出真正的相等結果。
hashCode 導致集合類(如 HashMap)行為異常掌握 equals 的正確實現模式,是 Java 進階的基石之一。