如果在 java 中覆盖 "equals()" 但不覆盖 hashCode() 怎么办?
What if in java I override "equals()" but not hashCode()?
[核心 java 编程] 说如果我覆盖 Object.equals(),那么我应该同时覆盖 Object.hashCode()。
这对我来说很奇怪,如果我不同时覆盖 hashCode() ,是否有可能在逻辑上发生错误?
能否帮忙举个例子说明一下?
非常感谢。
如果 a.equals(b)
为 true
,则 a.hashCode() == b.hashCode()
也必须为真。如果不是这种情况,将 a
添加到 HashSet
然后检查 set.contains(b)
是否会 return false
即使 Set
包含 a
,等于 b
.
这就是为什么 hashCode()
的合同(在 Object
class 中)规定:
If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
[核心 java 编程] 说如果我覆盖 Object.equals(),那么我应该同时覆盖 Object.hashCode()。
这对我来说很奇怪,如果我不同时覆盖 hashCode() ,是否有可能在逻辑上发生错误?
能否帮忙举个例子说明一下?
非常感谢。
如果 a.equals(b)
为 true
,则 a.hashCode() == b.hashCode()
也必须为真。如果不是这种情况,将 a
添加到 HashSet
然后检查 set.contains(b)
是否会 return false
即使 Set
包含 a
,等于 b
.
这就是为什么 hashCode()
的合同(在 Object
class 中)规定:
If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.