Object equals方法和hashcode方法

时间:2014-04-08 12:27:32

标签: java

我正在为即将到来的考试进行修改,我从过去的一篇论文中发现了一个我不确定的问题。

问题如下:描述Object equals方法实现的等价关系。 Object equals方法和hasCode方法之间必须保持什么关系?

如果考试中出现这种情况,那么我就不太清楚如何回答这个问题。我会试着尽我所能。由于Object equals方法检查两个对象是否相等,因此hashcode为对象提供ascii值。如果你有两个相同的对象,它们可能会被赋予相同的hascode,因为它们是相同的。对象等于您被告知它们是否相等的方法,而hashcode方法为您提供一个值,然后您可以使用该值与其他哈希码进行比较并找出它们是否相同。我也可以提到一些关于重写方法的内容吗?我不是,如果这可以在答案中发挥作用。

我的回答可能完全错误,但我能想到的最好:P

2 个答案:

答案 0 :(得分:1)

到Java API文档!特别是Object.hashCode

  

如果两个对象根据equals(Object)方法相等,则对两个对象中的每个对象调用hashCode方法必须生成相同的整数结果。

这意味着如果equal方法返回true,则hashCode必须为两个对象返回相同的值。

x.equals(y) == true    =>   x.hashCode() == y.hashCode()
  

如果两个对象根据equals(java.lang.Object)方法不相等,则不需要在两个对象中的每一个上调用hashCode方法必须生成不同的整数结果。但是,程序员应该知道为不等对象生成不同的整数结果可能会提高哈希表的性能。

但是!如果对象不一样,它们可能具有相同的hashCode()! (但不建议)

equals()方法的要求已经很好地描述了,所以我不会在这里重复它们。

答案 1 :(得分:0)

equals()方法和hashCode()方法的描述清楚地回答了这个问题。请查看equals method descriptionhashCode method description

以下是您可能正在寻找的相关答案:

  

类Object的equals方法实现最具辨别力   对象可能的等价关系;也就是说,对于任何非null   引用值x和y,当且仅当x时,此方法返回true   和y引用相同的对象(x == y的值为true)。

     

请注意,通常需要覆盖hashCode方法   每当重写此方法时,都要保持一般   hashCode方法的契约,它声明了相等的对象必须   有相同的哈希码。

这是hashCode方法描述:

  

如果两个对象根据equals(Object)方法相等,则对两个对象中的每个对象调用hashCode方法必须生成相同的整数结果。

此外,hashCode方法不提供对象的ASCII值,只是一个唯一定义对象的整数值。