预备知识:
哈希函数,哈希表,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一定相等。