首頁 >Java >java教程 >為什麼即使欄位值相同,使用「==」和「.equals()」比較自訂物件也會傳回「false」?

為什麼即使欄位值相同,使用「==」和「.equals()」比較自訂物件也會傳回「false」?

DDD
DDD原創
2024-12-25 03:11:09470瀏覽

Why Does Comparing Custom Objects with `==` and `.equals()` Return `false` Even with Identical Field Values?

使用.equals() 和== 運算符比較對象

問題:

中具有字串欄位的自訂類,為什麼同時使用== 運算子和.equals()方法傳回 false,即使欄位值相同?

答案:

== 運算子比較物件引用,判斷是否正在比較物件是記憶體中的同一個物件。另一方面,.equals() 比較物件的內容。

在這種情況下,使用 == 會導致 false,因為 object1 和 object2 在記憶體中不是同一個對象,即使它們具有相同的欄位價值。若要確定物件在欄位值方面是否相等,應使用 .equals()。

修訂的equals() 方法:

equals() 方法可以修改提供的程式碼以比較a 的值欄位:

public boolean equals(Object object2) {
    if (object2 instanceof MyClass) {
        MyClass otherClass = (MyClass) object2;
        return this.a.equals(otherClass.a);
    }
    return false;
}

附加說明:

重寫equals() 時,通常建議也重寫 hashCode() 以維護相等物件所具有的契約相等的雜湊碼。

以上是為什麼即使欄位值相同,使用「==」和「.equals()」比較自訂物件也會傳回「false」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn