首頁 >Java >Java基礎 >hashcode和equals的差別什麼

hashcode和equals的差別什麼

hzc
hzc原創
2020-07-03 11:59:456045瀏覽

hashcode和equals的差別是:1、若兩個物件equals回傳true,則hashCode有必要也傳回相同的int數;2、若兩個物件hashCode傳回相同int數,則equals不一定傳回true。

hashcode和equals的差別什麼

hashcode:物件的初始位址的整數表示     

Java中的物件是JVM在管理,JVM會在她認為合適的時候對物件進行移動,例如,在某些需要整理記憶體碎片的GC演算法下發生的GC。此時,物件的位址會變動,但hashcode不會改變。   

hashCode是為了提高在散列結構儲存中尋找的效率,在線性表中沒有作用。

  1. 一般一個類別的物件如果會儲存在HashTable,HashSet,HashMap等雜湊儲存結構中,那麼重寫equals後最好也重寫hashCode,否則會導致儲存數據的不唯一性(儲存了兩個equals相等的資料)。而如果確定不會儲存在這些雜湊結構中,則可以不重寫hashCode。

  2. 若兩個物件equals回傳true,則hashCode有必要也傳回相同的int數。

  3. 若兩個物件equals回傳false,則hashCode不一定會傳回不同的int數,但為不相等的物件產生不同hashCode值可以提高雜湊表的效能。

  4. 若兩個物件hashCode傳回相同int數,則equals不一定回傳true。

  5. 若兩個物件hashCode傳回不同int數,則equals一定回傳false。

  6. 同一物件在執行期間若已經儲存在集合中,則無法修改影響hashCode值的相關訊息,否則會導致記憶體外洩問題。

  7. 一般來說涉及物件之間的比較大小就需要重寫equals方法。

推薦教學:《java教學

以上是hashcode和equals的差別什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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