在实际应用程序中编写equals()和hashcode()方法

时间:2015-01-02 06:37:00

标签: java

当需要编写equals()和hashcode()方法时,有人可以在实际应用程序中解释我的scenaro。我听说我们在hibernate的实体类或测试程序中这样做。有人可以详细说明。谢谢提前

2 个答案:

答案 0 :(得分:0)

一个常见的原因是,如果我们将Object添加到像HashMap这样的集合中,Object将会有效。这可能是必要的原因应该从Object.hashCode()的Javadoc中推断出来(部分),

  

尽管合理可行,但是由类Object定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)

部分说明的Object.equals() Javadoc

  

x的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值yx,当且仅当yx == y引用同一对象时,此方法才返回true({{1 }}具有值true)。

     

请注意,一旦覆盖此方法,通常需要覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等对象必须具有相等的哈希码。

答案 1 :(得分:0)

每个班级都有equals()hashcode()方法。

默认的equals()方法只是比较分配对象的内存地址。

默认的hashcode()方法返回已分配对象的内存地址。

如果要指定一些不太严格的相等标准,则应覆盖equals()方法(默认等于仅在引用相等时才返回true)。例如,在String类中,equals方法将字符串char与char进行比较,如果每个char都相同,则返回true。

如果您打算进行任何类型的散列,则应覆盖hashcode()方法。我不确定您对数据结构的熟悉程度,但散列在计算机科学中至关重要。使用散列的数据结构的一些示例是散列表和字典。