覆盖Java中的equals()和hashCode()

可能重复:
在Java中覆盖equals和hashCode

所有,

我已经定义了我的类,并且还要覆盖equals()和hashCode()方法。 但我不知道具体应该为我自己的课程实现这些方法。 任何人都可以对自定义类的这些方法的实现有所了解吗?

您说您已经知道哪个自定义类需要覆盖hashCode / equals? 然后您还知道哪些属性(全局变量)确定每个类的相等性。

当您了解这些属性时,您可以手动或通过使用现代IDE(如Eclipse,NetBeans等)生成方法来实现hashCode / equals。在Eclipse中,在“源”下有一个名为“Generate hashCode()和equals()”的选项“菜单

替代文字

对于equals,答案取决于您的业务需求,即对象等于什么意味着什么。

hashCode()应始终为对象返回唯一值,除非该对象等于另一个对象。 它应该取决于对象属性的值。

Java理论与实践:将其排除在外

基本上,如果要将对象存储在集合(Map,Set,List)中,则必须根据文档中定义的协定实现equals和hashCode方法

否则,许多集合实现将不具有预期的行为。 对于实现线索,请阅读Object Javadoc for equals和hashcode 。

阅读java.lang.Object两个方法的API文档。 它非常准确地描述了覆盖实现应该如何表现。

实现equals()时,请确保理解相等和身份之间的区别。 两个对象实例可能“相等”但可能不相同。 a.equals(b)是对等式的测试,您的业务规则应该定义。 ==是对象标识的测试(同一个对象实例)