使用.equals() 和== 比較物件相等性
在物件導向程式設計中,比較物件對於確定它們的相等性至關重要關於他們的狀態和行為。本文探討了使用 .equals() 方法和 == 運算子來比較兩個物件。
== 運算子:參考相等
== 運算子比較物件引用,指示兩個物件是否指向相同記憶體位置(即,它們是同一物件) 。這稱為引用相等。在您的範例中,object1 和 object2 是 MyClass 的兩個不同實例,因此即使它們具有相同的欄位值(「test」),它們也不是同一個對象,導致 == 運算子的計算錯誤。
.equals() 方法:內容相等
另一方面,.equals() 方法檢查內容相等。它在 MyClass 中被重寫以比較 a 字段的值。如果 object1 和 object2 的 a 值相同,則此比較將傳回 true,表示它們具有相同的內容。
.equals() 的正確實作
中您的程式碼中, .equals() 的實作有邏輯錯誤。它檢查 a 是否等於整個 object2 實例,而不僅僅是它的 a 字段。要比較字串,請修改equals() 方法,如下所示:
public boolean equals(Object object2) { return object2 instanceof MyClass && a.equals(((MyClass) object2).a); }
透過此修改,如果兩個物件都是MyClass 的實例並且它們的a 欄位具有相同的值,則. equals() 將會回傳true。
結論
準確比較物件需要理解引用相等性和內容之間的差異平等。 == 運算子用於引用比較,而 .equals() 方法被重寫以根據特定物件屬性確定內容相等。 .equals() 的正確實作對於確保一致的相等檢查至關重要。請記住,如果您重寫 .equals(),您還應該考慮重寫 hashCode() 以維護相等物件具有相等雜湊碼的契約。
以上是.equals() 與 ==:何時在 Java 中使用 Which 進行物件比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!