为什么hashCode()和equals()都存在

Nee*_*raj 3 java

为什么java Object类有两个方法hashcode()和equals()?其中一个看起来多余,它渗透到最底层的派生类?

Jon*_*eet 12

为什么你认为一个是多余的?他们说不同的事情:

  • hashCode是"给我一些有效的方法来看看两个物体是否可能是平等的"
  • equals是"检查这个物体是否真的与另一物体相等"

你肯定需要两者 - 虽然我不相信他们应该首先在Object中.

您绝对需要哈希代码才能使用哈希表执行高效查找 - 并且您绝对需要进一步的相等性检查,因为哈希发生冲突(例如,有更多可能的字符串而不是哈希代码).

  • @Martinho:两个.可以使用==已经检查引用标识...但是大多数类型并不真正具有"相等"的概念或基于其数据的合理哈希 - 那么为什么要为所有对象做广告?博客文章有更多细节,当然:) (2认同)