当需要编写equals()和hashcode()方法时,有人可以在实际应用程序中解释我的scenaro。我听说我们在hibernate的实体类或测试程序中这样做。有人可以详细说明。谢谢提前
答案 0 :(得分:0)
一个常见的原因是,如果我们将Object
添加到像HashMap
这样的集合中,Object
将会有效。这可能是必要的原因应该从Object.hashCode()
的Javadoc中推断出来(部分),
尽管合理可行,但是由类
Object
定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)
部分说明的Object.equals()
Javadoc
类
x
的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值y
和x
,当且仅当y
和x == y
引用同一对象时,此方法才返回true({{1 }}具有值true
)。请注意,一旦覆盖此方法,通常需要覆盖
hashCode
方法,以便维护hashCode
方法的常规协定,该方法声明相等对象必须具有相等的哈希码。
答案 1 :(得分:0)
每个班级都有equals()
和hashcode()
方法。
默认的equals()
方法只是比较分配对象的内存地址。
默认的hashcode()
方法返回已分配对象的内存地址。
如果要指定一些不太严格的相等标准,则应覆盖equals()
方法(默认等于仅在引用相等时才返回true)。例如,在String
类中,equals方法将字符串char与char进行比较,如果每个char都相同,则返回true。
如果您打算进行任何类型的散列,则应覆盖hashcode()
方法。我不确定您对数据结构的熟悉程度,但散列在计算机科学中至关重要。使用散列的数据结构的一些示例是散列表和字典。