gpt4 book ai didi

Java equals() 和 hashCode() 基于不同的字段?

转载 作者:IT老高 更新时间:2023-10-28 20:59:36 24 4
gpt4 key购买 nike

在任何情况下,类实现其equals() 是有意义的吗?和 hashCode()方法使用不同的类字段集?

我问是因为我对 Netbeans 感到困惑 equals()hashCode()生成器,要求您分别选择要包含在每个方法中的字段。我总是为这两种方法选择相同的字段,但是否存在不正确选择的情况?

最佳答案

好吧,equals() 必须使用 hashCode() 使用的所有字段,否则你会得到不同的相等哈希码对象。但反过来则不然 - 您可以在选择哈希码时选择不考虑某个特定字段。这样,您最终可能会为两个不相等的对象获得相同的哈希码,这两个对象的区别仅在于“未使用”字段(而不是通过自然碰撞)。您只希望在您知道不太可能发生冲突但您将要散列 lot 的情况下这样做。我想这非常罕见:)

另一种情况是您有某种自定义相等比较 - 例如不区分大小写的字符串比较 - 为该字段生成哈希码很棘手或很昂贵。同样,这会导致更大的碰撞可能性,但也是有效的。

关于Java equals() 和 hashCode() 基于不同的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com