Java等于和hashCode方法 - 技术约束

时间:2011-09-21 21:43:24

标签: java

我对java的equals(Object o)和hashCode()方法有疑问。这两种方法有哪些实施的技术限制?在实施这种方法时,有什么我不能做的吗?

5 个答案:

答案 0 :(得分:1)

无。它只是Object类中的两个方法。您甚至可以在此方法中更改对象的状态,这将使每个开发人员和系统都变得怪异,但从技术角度来看它仍然有效。

答案 1 :(得分:1)

您可以技术上在其中的任何内容,您可以使用任何其他方法。

相反,您关心的是方法的实用合同义务。

良好的经验法则:

  1. 如果覆盖一个,则覆盖另一个。
  2. 一个中使用的变量应该用在另一个中。

答案 2 :(得分:0)

给定对象必须始终报告相同的哈希值 equals()表示相等的两个对象必须报告相同的哈希值 - 因此hashcode中没有时间戳:)。

两个不等的对象也可以具有相同的哈希码,但最好使哈希码难以重现。

答案 3 :(得分:0)

你需要记住的是:

  1. 这些约束非常重要
  2. javadoc中Object.hashCode()Object.equals()
  3. 的所有内容都记录良好

    每次覆盖任何这些方法时,请确保理解它。

答案 4 :(得分:0)

  

在实施这种方法时,有什么我不能做的吗?

嗯,作为一条经验法则(以及上面提到的@RHT和@AnttiSykäriexplains here)你的未来自我帮忙,始终使用来自{的Apache Commons Lang library correct需要的所有细节。 ; - )