使用hashCode实现等于没有去?

Jon*_*her 2 java equals hashcode

我一直在尝试以下equals和hashCode的实现:

@Override
public boolean equals(Object obj) {
    return obj != null && hashCode() == obj.hashCode();
}

@Override
public int hashCode() {
    return new HashCodeBuilder().append(myField1).append(myField2).toHashCode();
}
Run Code Online (Sandbox Code Playgroud)

基本上,我期望equals返回true任何具有相同的2个类hashCode,这归结为我用于生成hashCode的字段的值.

我知道,这也返回true不同类别碰巧在这些领域的平等价值.

问题:这种实施的缺陷是什么?

Oli*_*rth 8

哈希碰撞.具有不同字段值的实例可能具有匹配的哈希码,因此比较相等.我不确定为什么这会有用.