Java hashCode()方法是对象相等的可靠度量吗?

Luc*_*ryn 1 java compare equality hashcode

我目前正在比较两个相同类型的复杂对象,其中多个字段由自定义对象类型的数据结构组成.假设没有任何自定义对象覆盖该hashCode()方法,如果我比较对象中每个字段的哈希码,并且它们结果是相同的,那么我是否100%确信比较对象的内容是相同?如果没有,假设我不能使用任何外部库,那么您建议使用哪种方法来比较两个对象.

Jon*_*eet 8

绝对不.您应该使用hashCode()第一遍 - 如果哈希码不同,您可以假设对象不相等.如果哈希码是相同的,你应该打电话equals()来检查完全平等.

以这种方式思考:只有2 32个可能的哈希码.String作为一个例子,有多少种可能的不同对象?远不止于此.因此,至少两个不相等的字符串必须共享相同的哈希码.

Eric Lippert 很好地描述了哈希码 - 诚然从.NET的角度来看,但原则是相同的.

  • 如果要比较的两个对象仅被认为是相等的,如果所有这70个字段相等,那么绝对没有别的办法.请注意,Eclipse等IDE可以自动为您生成`hashCode`和`equals`方法. (3认同)