HashCode和Equals都是object的方法在jdk中源码如下:
原始的这两个方法equals是比较引用。
hashcode是调用native方法根据这个对象在内存中的实际地址值来算的一个哈希码值。
所以要么都相等,要么都不相等,所以重写的时候应该都重写下,否则可能就不一致了,如果不一致的话,对使用散列表数据结构的数据类型会有影响,比如hashmap,hashtable,map,hashset等。
比如HashMap,如果hashCode和equals不是同时相等,或者同时不相等:
相同的key,hashCode相等时,能找到具体的下标,但是相同的key,equals不相等,则取不出对象。
相同的key,hashCode不相等时,会存到不同的下标下,这时就算equals相等也没用了,下标都没找对。