为什么我不能只比较两个对象的 hashCode 来确定它们是否相等?

1 java hash equals hashcode

为什么Eclipse实现的equals方法要比较每个值,只比较两个对象的hashCode不是更简单吗?

据我所知:

  • hashCode 总是为相同的输入生成相同的哈希值
  • 因此,如果两个对象相等,它们应该具有相同的哈希值
  • 如果相等的对象具有相同的哈希值,我可以检查哈希值以确定对象是否相等

编辑:相关问题,如果 equals 实际上不需要 hashCode,为什么在实现 equals 时总是实现 hashCode?

use*_*421 6

hashCode 总是为相同的输入生成相同的哈希值

正确的。

因此,如果两个对象相等,它们应该具有相同的哈希值

正确的。

如果相等的对象具有相同的哈希值,我可以检查哈希值以确定对象是否相等

不合逻辑的推论。不相等的对象也可以具有相同的哈希码。这就是哈希码的目的。

相关问题,如果 equals 实际上不需要 hashCode,为什么在实现 equals 时总是实现 hashCode?

因为它是散列所需要的,在HashMap, HashSet,和朋友中。如果您认为您的对象永远不会被如此使用,请不要覆盖它,祝您好运。