为什么当两个对象相同时,equals()方法返回false?

时间:2017-03-27 14:17:08

标签: java class object equals equality

==

我在另一个答案中读到了这个:

  

equals()运算符测试两个变量是否具有相同的引用(也就是指向内存地址的指针)。

     

o1方法测试两个变量是否引用具有相同状态(值)的对象。

此处,由于o2==引用了两个不同的对象,因此我明白了Object返回false的原因。

但是这两个对象都是使用equals()类的默认构造函数创建的,因此具有相同的值。为什么<md-chip-list> <md-chip>Papadum</md-chip> <md-chip>Naan</md-chip> <md-chip>Dal</md-chip> </md-chip-list> 方法返回false?

3 个答案:

答案 0 :(得分:4)

equals()提供的java.lang.Object的实现已定义以返回false,除非引用引用同一对象,在这种情况下它返回{ {1}}。

这是设计(该方法模仿true的行为),并鼓励程序员为==实现自己的equals()版本(如果适用)。例如,如果另一个class作为参数传递,请参阅java.lang.String#equals比较内容

答案 1 :(得分:2)

您必须编写自己的equals方法,该方法会覆盖equals class Object方法,因为如果true对象与this对象相同,则该方法返回false参数中的对象和x否则。

类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非null 引用值ytrue,当且仅当x和{{1}时,此方法才会返回y引用同一个对象(x == y的值为true)。 (有关更多信息,请阅读Javadoc)

答案 2 :(得分:1)

所有Java对象都继承自Object类。因此,Object的方法可用于所有Java对象。其中一种方法是equals()

默认情况下,班级equals()Object的实施与==运营商相同。

如果程序员希望使用equals()来测试对象的值是否相等,他必须覆盖equals()并提供他自己的实现(应符合equals()的一般合同;参考到Javadoc)。