1. 程式人生 > >hashcode和equals區別

hashcode和equals區別

不同 相同 nbsp 一個 大小 之間 列存儲 ash code

hashcode:對象的初始地址的整數表示

Java中的對象是JVM在管理,JVM會在她認為合適的時候對對象進行移動,比如,在某些需要整理內存碎片的GC算法下發生的GC。此時,對象的地址會變動,但hashcode不會改變。   

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

2.一般一個類的對象如果會存儲在HashTable,HashSet,HashMap等散列存儲結構中,那麽重寫equals後最好也重寫hashCode,否則會導致存儲數據的不唯一性(存儲了兩個equals相等的數據)。而如果確定不會存儲在這些散列結構中,則可以不重寫hashCode。 3.若兩個對象equals返回true,則hashCode有必要也返回相同的int數。

4.若兩個對象equals返回false,則hashCode不一定返回不同的int數,但為不相等的對象生成不同hashCode值可以提高哈希表的性能。

5.若兩個對象hashCode返回相同int數,則equals不一定返回true。

6.若兩個對象hashCode返回不同int數,則equals一定返回false。

7.同一對象在執行期間若已經存儲在集合中,則不能修改影響hashCode值的相關信息,否則會導致內存泄露問題。

  8.一般來說涉及到對象之間的比較大小就需要重寫equals方法。

hashcode和equals區別