預備知識:
哈希函數,哈希表,HashMap數據結構。
先說結論:
因爲如果重寫equals方法後不重寫hashcode,會出現這麼一種情況:兩個equal的對象,放到hashmap數據結構中,會出現對應着兩個不同的value的情況。這意味着hashmap將兩個equal的對象判斷爲不相同。
下面解釋:
map中同一個key是對應着相同的value。而map是如何判斷key是否相同?首先它是先判斷兩個key的hashcode是否相同,如果相同的情況下,纔會接着判斷兩個key是否equal。也就是如果hashcode不同那麼就不會判斷是否equal了。在map裏這兩個key就是不同的key,儘管他們可能根據重寫的equals判斷是相同的。
爲什麼會先判斷hashcode是否相等在判斷equals?
我們要知道HashCode的存在主要是爲了查找的快捷性。默認的hashcode是根據改對象的地址通過hash算法得出的。而hash算法就是一種壓縮算法,也就是根據不同的地址計算出來的hashcode可能是相同的,那麼hashcode相同的情況下要判斷兩個對象是否相同就需要equals方法了。
因爲判斷hashcode是判斷equal的先決條件,所以纔會說hashcode相等但是equal不一定相等,但是equal相等hashcode一定相等。