1. 程式人生 > >為什麼要同時重寫hashcode和equals方法

為什麼要同時重寫hashcode和equals方法

HashCode和Equals都是object的方法在jdk中原始碼如下:


原始的這兩個方法equals是比較引用。


hashcode是呼叫native方法根據這個物件在記憶體中的實際地址值來算的一個雜湊碼值。

所以要麼都相等,要麼都不相等,所以重寫的時候應該都重寫下,否則可能就不一致了,如果不一致的話,對使用散列表資料結構的資料型別會有影響,比如hashmap,hashtable,map,hashset等。

比如HashMap,如果hashCode和equals不是同時相等,或者同時不相等:

相同的key,hashCode相等時,能找到具體的下標,但是相同的key,equals不相等,則取不出物件。

相同的key,hashCode不相等時,會存到不同的下標下,這時就算equals相等也沒用了,下標都沒找對。