这个问题已经有了答案:
[核心Java编程]说,如果我重写对象.ErralSe(),那么我应该同时重写对象.HASCODE()。
这对我来说很奇怪,如果我不同时重写hashcode(),逻辑中是否可能发生错误?
你能举个例子来说明吗?
谢谢。
如果 a.equals(b) 是 true , a.hashCode() == b.hashCode() 也必须是真的。如果不是这样的话, a 到A HashSet 然后检查是否 set.contains(b) 将返回 false 即使 Set 包含 一 ,等于 b .
a.equals(b)
true
a.hashCode() == b.hashCode()
a
HashSet
set.contains(b)
false
Set
一
b
这就是为什么 hashCode() 中 Object 类)规定:
hashCode()
Object
如果两个对象根据equals(object)方法相等,则对两个对象中的每个对象调用hashcode方法都必须产生相同的整数结果。