作者:小北
首先对于这个问题我们应该要知道我们为什么要重写equals方法。
之所以要重写了equals方法,是因为一个类如果重写了equals方法,那么对于这个类的实例对象,如果equals返回的结果如果是true的话,我们就认为他们是相同的。
就比如一个Person类的实例对象如果我们重写了equals方法将身份证号码相同的就认定是同一个人。
那么如果hashCode方法不重写的话,对于两个Person对象,那么他们的hashCode值也将不一样,但如果这样的话,如:在往HashMap集合中存入的一对元素,他们的key是两个Person对象且这两个Person对象的身份证相同,
那么我们本来的目的就是这两个Peron对象是同一个,在集合中只能有一个这样的key,
但是由于你未重写hashCode方法,那么这两个Person对象对hashCode自然也就不同了,那么hash(key)结果出来的hash值也同样会不同,
那对于这两个对象在table数组中找到的位置岂不是不同了,这岂不是与我们重写equals方法的目的背道而驰了吗?
所以在重写equals方法一般都会重写hashCode。