兩個對象的 hashCode()相同,則 equals()也一定為 true,對嗎?


在java中,equals和hashcode是有設計要求的,equals相等,則hashcode一定相等,反之則不然。

為何會有這樣的要求?

在集合中,比如HashSet中,要求放入的對象不能重復,怎么判定呢?

首先會調用hashcode,如果hashcode相等,則繼續調用equals,也相等,則認為重復。

如果重寫equals后,如果不重寫hashcode,則hashcode就是繼承自Object的,返回內存編碼,這時候可能出現equals相等,而hashcode不等,你的對象使用集合時,就會等不到正確的結果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
     public  V put(K key, V value) {
         if  (key ==  null )
             return  putForNullKey(value);
         int  hash = hash(key.hashCode());
         int  i = indexFor(hash, table.length);
         for  (Entry<K,V> e = table[i]; e !=  null ; e = e.next) {
             Object k;
             if  (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                 V oldValue = e.value;
                 e.value = value;
                 e.recordAccess( this );
                 return  oldValue;
             }
         }
 
         modCount++;
         addEntry(hash, key, value, i);
         return  null ;
     }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM