如果在 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.