HashCode和Equals都是object的方法在jdk中源码如下:
原始的这两个方法equals是比较引用。
hashcode是调用native方法根据这个对象在内存中的实际地址值来算的一个哈希码值。
所以要么都相等,要么都不相等,所以重写的时候应该都重写下,否则可能就不一致了,如果不一致的话,对使用散列表数据结构的数据类型会有影响,比如hashmap,hashtable,map,hashset等。
比如HashMap,如果hashCode和equals不是同时相等,或者同时不相等:
相同的key,hashCode相等时,能找到具体的下标,但是相同的key,equals不相等,则取不出对象。
相同的key,hashCode不相等时,会存到不同的下标下,这时就算equals相等也没用了,下标都没找对。
本文深入探讨了HashCode和Equals方法在Java中的实现原理及其重要性。解释了为什么在重写时通常需要同时重写这两个方法,并详细说明了如果不这样做可能会导致HashMap等散列表数据结构出现问题的具体情况。
2311

被折叠的 条评论
为什么被折叠?



