Java 我应该何时重写Equals函数?

Java 我应该何时重写Equals函数?,java,Java,可能重复: 我应该为我创建的任何类重写equals函数吗 即使对于只包含一些非常简单属性的非常简单的类,通过等于我需要它的每个属性都相等 我应该为我创建的任何类重写equals函数吗? 如果(且仅当)对象“表示某些数据”,即,如果对象对诸如人、汽车或RecipieComponent之类的对象进行建模,则覆盖等于(这些通常以集合等形式结束)。不要为其他类型的类重写equals,例如LoginServlet或DatabaseUtil 请记住,无论何时重写等于,都要始终重写hashCode (一个自

可能重复:

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

即使对于只包含一些非常简单属性的非常简单的类,通过等于我需要它的每个属性都相等

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

如果(且仅当)对象“表示某些数据”,即,如果对象对诸如人、
汽车或
RecipieComponent
之类的对象进行建模,则覆盖
等于
(这些通常以集合等形式结束)。不要为其他类型的类重写equals,例如
LoginServlet
DatabaseUtil

请记住,无论何时重写
等于
,都要始终重写
hashCode

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

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

[…]我需要它的每个属性都相等?

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

相关问题:


只有在有理由的情况下才应重写
equals()
。如上所述,为非最终类或可变类编写适当的
equals()
方法非常困难


如果您的应用程序需要某种不同于“相同对象”的平等概念,那么一定要继续。只需阅读上面的参考资料,了解其中所涉及的内容。但作为惯例?绝对不是。

好吧,如果你从现实生活的角度来思考的话,你会更容易理解overriding equals()的概念

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

java中的字符串对象就是一个很好的例子。

   String string1= new String("hello");

   String string2= "hello";
他们平等吗?。。是的,绝对是的,不过从逻辑上来说。只能检查它们的相等性,因为Java已经覆盖了String equals()方法

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

1.员工姓名

2.雇员身份证

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


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

+ 1不能说得更好,简单但是很好的解释。+ 1,不错的答案。不过,关于你的最后一点,还有一些问题。如果某个员工是可变的,那么检查某个员工id的方法可能会有风险。嗯……如果某个员工是可变的……他们会让你完全失控。整个equals()世界都失败了。你的理由是什么?嗯……你担心如果它是可变的,那么员工ID就不一致了……那么……为了确保平等,什么是一致的呢。。