hashcode和equals的差別是:1、若兩個物件equals回傳true,則hashCode有必要也傳回相同的int數;2、若兩個物件hashCode傳回相同int數,則equals不一定傳回true。
hashcode:物件的初始位址的整數表示
Java中的物件是JVM在管理,JVM會在她認為合適的時候對物件進行移動,例如,在某些需要整理記憶體碎片的GC演算法下發生的GC。此時,物件的位址會變動,但hashcode不會改變。
hashCode是為了提高在散列結構儲存中尋找的效率,在線性表中沒有作用。
一般一個類別的物件如果會儲存在HashTable,HashSet,HashMap等雜湊儲存結構中,那麼重寫equals後最好也重寫hashCode,否則會導致儲存數據的不唯一性(儲存了兩個equals相等的資料)。而如果確定不會儲存在這些雜湊結構中,則可以不重寫hashCode。
若兩個物件equals回傳true,則hashCode有必要也傳回相同的int數。
若兩個物件equals回傳false,則hashCode不一定會傳回不同的int數,但為不相等的物件產生不同hashCode值可以提高雜湊表的效能。
若兩個物件hashCode傳回相同int數,則equals不一定回傳true。
若兩個物件hashCode傳回不同int數,則equals一定回傳false。
同一物件在執行期間若已經儲存在集合中,則無法修改影響hashCode值的相關訊息,否則會導致記憶體外洩問題。
一般來說涉及物件之間的比較大小就需要重寫equals方法。
推薦教學:《java教學》
以上是hashcode和equals的差別什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!