为什么Intelij Idea让我们通过生成器制作不正确的对equals()-hashcode()?

问题描述 投票:0回答:2

IntelliJ IDEA中有一个生成器。您按Alt + Ins,选择“等于和hashCode”,将打开一个构造函数。您可以选择等于的字段,然后可以选择hashCode()的字段。为什么我们要选择不同的字段集?它不等于equals-hashCode合同吗?

java intellij-idea equals hashcode
2个回答
0
投票

嗯,它实际上不允许您选择不同的字段集,它允许您为equals选择字段的子集,以用于hashCode。尽管这将导致较差的哈希码,因为这将导致更多的哈希冲突,但从技术上讲还是正确的。注意,仅要求相等的对象具有相等的哈希码,而不是相等的哈希码必须来自相等的对象。对于具有比int(例如java.lang.Long)更多不同实例的类,不可能实现后者。

[如果仅计算冲突的最佳哈希值与处理冲突相比过于昂贵,则可能会使用次优哈希进行冲突。


0
投票

根据对象类的Java文档-

© www.soinside.com 2019 - 2024. All rights reserved.