==
我在另一个答案中读到了这个:
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?
答案 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 引用值y
和true
,当且仅当x
和{{1}时,此方法才会返回y
引用同一个对象(x == y
的值为true
)。 (有关更多信息,请阅读Javadoc)
答案 2 :(得分:1)
所有Java对象都继承自Object
类。因此,Object
的方法可用于所有Java对象。其中一种方法是equals()
。
默认情况下,班级equals()
中Object
的实施与==
运营商相同。
如果程序员希望使用equals()
来测试对象的值是否相等,他必须覆盖equals()
并提供他自己的实现(应符合equals()
的一般合同;参考到Javadoc)。