使用.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中文網其他相關文章!