关于两个对象的哈希码相等性

时间:2014-11-30 05:55:00

标签: java hashcode

我在面试中有以下问题,请告知哪些是正确的选择..

给定同一个类的两个对象a和b,并且如果为该类正确实现了equals()和hashCode(),则下列哪一项必须成立? 多个选项可以是正确的(检查适用的任何内容)

  1. 如果a.hashCode()== b.hashCode()则a.equals(b)
  2. 如果a.hashCode()== b.hashCode()那么!a.equals(b)
  3. 如果a.hashCode()!= b.hashCode()则a.equals(b)
  4. 如果a.hashCode()!= b.hashCode()那么!a.equals(b)
  5. 现在请告知哪些选项是正确的。

2 个答案:

答案 0 :(得分:0)

见方括号内的答案。

If a.hashCode() == b.hashCode() then a.equals(b) [could be or could not be]
If a.hashCode() == b.hashCode() then !a.equals(b) [could be or could not be]
If a.hashCode() != b.hashCode() then a.equals(b) [FALSE]
If a.hashCode() != b.hashCode() then !a.equals(b) [TRUE]

本文简要解释了所有这些: http://www.ibm.com/developerworks/library/j-jtp05273/

答案 1 :(得分:0)

在存储和查找哈希表中的对象时,会使用hashCode()和equals()方法的组合。

如果Java Collections API中的哈希表能够正常工作,那么有两条规则可以很好地了解如何在自己的类中实现hashCode()方法:

  1. 如果object1和object2根据equals()方法相等, 它们也必须具有相同的哈希码。
  2. 如果object1和object2具有相同的哈希码,则不必 也是平等的。
  3. 用简短的话来说:

    1. 如果相等,那么也是相同的哈希码。
    2. 相同的哈希码无法保证相等。