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

Java 在实际应用程序中编写equals()和hashcode()方法,java,Java,当需要编写equals和hashcode方法时,有人能给我解释一下实际应用中的scenaro吗。我听说我们在hibernate的实体类或测试程序中这样做。有人能详细说明一下吗?提前谢谢一个常见的原因是,如果我们将对象添加到像。可能需要这样做的原因应该可以从Javadoc中推断出来,Javadoc的部分内容是 只要是合理可行的,类对象定义的hashCode方法确实会为不同的对象返回不同的整数。这通常是通过将对象的内部地址转换为整数来实现的,但是JavaTM编程语言不需要这种实现技术 而Javado

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

一个常见的原因是,如果我们将对象添加到像。可能需要这样做的原因应该可以从Javadoc中推断出来,Javadoc的部分内容是

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

而Javadoc部分说

类对象的equals方法实现了对象上最有区别的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象x==y的值为true时,此方法才返回true

请注意,每当重写hashCode方法时,通常都需要重写该方法,以便维护hashCode方法的一般约定,即相等的对象必须具有相等的哈希代码

每个类都有一个equals和hashcode方法

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

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

如果要指定一些不太严格的相等条件,则应重写equals方法。只有在引用相等时,默认equals才会返回true。例如,在String类中,equals方法逐字符比较字符串,如果每个字符都相同,则返回true


如果要进行任何类型的哈希运算,则应重写hashcode方法。我不确定您对数据结构有多熟悉,但哈希在计算机科学中是至关重要的。使用哈希的数据结构的一些示例是哈希表和字典。

相关:简而言之,当目标类的对象存储在哈希集合(如Hashtable Observe、HashMap、,我非常了解Equalas和hashcode方法的哈希和imp。我只想知道实时应用程序在需要实现它们时的真实场景。我知道一种场景,比如在哈希实时映射中用作键,或者在哈希集中存储对象。请给出一些其他场景,例如-为什么在Hibernate实体对象中我们需要覆盖这两个方法?在Hibernate实体中不强制覆盖它们,如果您保证这些实体类的对象永远不会被存储在散列集合中,那么您可以考虑在整个应用程序中基于主键的那些对象之间的比较是多余的。谢谢,并且我完全同意,但是您可以给我们在需要时散列相关集合以外的任何场景吗?除了运行测试程序之外,我还非常了解Equalas和hashcode方法的哈希和imp。我只想知道实时应用程序在需要实现它们时的真实场景。我知道一种场景,比如在哈希实时映射中用作键,或者在哈希集中存储对象。请给出一些其他场景,比如-为什么在Hibernate实体对象中我们需要跳过这两种方法?