什么时候应该覆盖Equalsfunction?

可能重复:
Java:总是覆盖等于?

我应该为我创建的任何类重写equals函数吗?

即使是非常简单的类,只包含一些非常简单的属性,并且通过equals我需要它的每个属性相等?

我应该为我创建的任何类重写equals函数吗?

覆盖equals if(并且仅当)对象“表示某些数据”,即,如果它模拟诸如PersonCarRecipieIngredient (这些通常最终在集合RecipieIngredient )。 不要为其他类型的类重写equals,例如LoginServletDatabaseUtil

请记住,只要覆盖equals就始终覆盖hashCode

(一个自然的后续问题:) 如果我不重写equals和hashCode会发生什么?

任何两个对象都将被视为不相等,除非它们是完全相同的对象。

[…]我需要它的每一个属性是平等的吗?

通常是的 。 这取决于如何定义你的平等概念。 请注意,对于引用类型,您可以在实现自己的对象时重用/委托equals (和hashCode )的对象实现。

相关问题:

  • 为什么我们需要在java中重写equals和hashcode,为什么我们不能使用Object类实现
  • 为什么我需要覆盖Java中的equals和hashCode方法?

如果你有理由,你应该只覆盖equals() 。 如此处所述,为非final或可变类编写适当的equals()方法非常困难。

如果您的应用程序需要某种与“相同对象”不同的平等概念,那么请务必继续。 只需阅读上述参考资料即可了解所涉及的内容。 但作为例行公事? 当然不。

好吧,如果你用现实生活方式来思考,那么更多地理解覆盖等于()的概念。

只有当逻辑上两个对象需要相等时,才应该覆盖Equals方法。 此外,如果你担心,程序中的某个地方可能会重新创建一个对象,那么你必须重叠equals()。

一个很好的例子是java中的String对象。

  String string1= new String("hello"); String string2= "hello"; 

它们是否相同?是的,但绝对是……但是。 您只能检查它们的相等性,因为Java已经过度使用了String equals()方法。

众所周知,类实际上是其对象的模板。 因此,让我们考虑一下,有一个员工类,它实际上决定了公司员工可能拥有的属性,公司中的实际员工是该类的对象。 通常,员工的属性可以如下。

1.员工姓名

2.员工ID

3.出生日期。 。 。 .. 。 。 。 。 。

因此,在这种情况下,您应该只检查您的equals方法中的员工ID是否相等。 但是,如果你的对象缺乏这样明显的属性,那么你应该继续检查几乎所有的值,以避免让你的程序认为两个不同的人相等。