equals和hashcode的關係

2021-10-19 11:06:52 字數 769 閱讀 6921

首先要明確,equals的優先順序比hashcode高。我們需要確保當兩個物件equals相等時,那麼他們的hashcode一定相等。如果兩個物件equals不相等,那麼兩個物件的 hashcode 方法不一定會生成不同的整數結果。但是,程式設計師應該知道,為不相等的物件生成不同整數結果可以提高雜湊表的效能。

也就是說,

若兩個物件equals相等,則hashcode也相同。若equals不相同,則hashcode不需要確保一定不相同。

反過來說若兩個物件hashcode相同,則equals不一定返回true。若兩個物件hashcode不同,則equals一定返回false。

什麼時候需要重寫equals和hashcode。一般來說涉及到物件之間的比較大小就需要重寫equals方法,但是為什麼說重寫了equals就需要重寫hashcode呢?實際上這只是一條規範,如果不這樣做程式也可以執行,只不過會隱藏bug。一般乙個類的物件如果會儲存在hash等雜湊儲存結構中,那麼重寫equals後最好也重寫hashcode。若不然,想象這種情況,兩個物件equals和hashcode都不相等,此時重寫了equals方法而沒有重寫hashcode方法,那麼兩個物件hashcode還是不同,可以儲存在hash雜湊結構中,但是這時兩個物件equals相等了,那麼就代表你在乙個hash結構中儲存了兩個相同的物件。而如果確定不會儲存在這些雜湊結構中,則可以不重寫hashcode。但是還是重寫比較好一點,誰能保證後期不會儲存在這些結構中呢。

equals和hashcode的重寫

下面給出例項 package xuming class student public student string name,int age,int classnum 重寫equals方法 public boolean equals object o 測試引用o是都為null if o null 測...

equals 和hashCode 的區別

equals 反映的是或變數具體的值,即兩個物件包含的值 可能是物件的引用,也可能是值型別的值 hashcode 計算出物件例項的雜湊碼 根據記憶體位址返回的int型的數值 並返回雜湊碼,又稱為雜湊函式。根據object的hashcode都是唯一的 當然,當物件重寫了hashcode 方法時,結果就...

equals 和hashCode 使用總結

equals package cn.galc.test public class testequals 沒有重寫equals class cat 先判斷比較物件是否為null 判斷比較物件是否為要比較類的例項 比較倆個成員變數是否完全相等。public class testequals 重寫equa...