[英]Why does the equals() method return false when the two objects are identical?
public class Test {
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
System.out.print((o1 == o2) + " " + (o1.equals(o2)));
}
}
我以不同的答案阅读:
==
运算符测试两个变量是否具有相同的引用(即指向内存地址的指针)。而
equals()
方法测试两个变量是否引用具有相同状态(值)的对象。
在这里,由于o1
和o2
引用了两个不同的对象,所以我明白了为什么==
返回false。
但是这两个对象都是使用Object
类的默认构造函数创建的,因此具有相同的值。 为什么equals()
方法返回false?
除非引用引用指向同一对象,否则java.lang.Object
提供的equals()
的实现被定义为返回false
,在这种情况下,它返回true
。
这是设计使然(该方法模仿==
的行为),并鼓励程序员为自己的class
实现自己的equals()
版本。 例如,请参阅java.lang.String#equals
,如果将另一个String
作为参数传递,则将比较内容 。
您必须编写自己的equals
方法来覆盖class Object
的equals
方法,因为如果this
对象与参数中的对象相同,则this
方法返回true
否则返回false
。
类Object的equals方法在对象上实现了最有区别的对等关系。 也就是说,对于任何非空参考值x
和y
,当且仅当x
和y
引用相同的对象( x == y
的值为true
)时,此方法才返回true
。 (有关更多信息,请阅读Javadoc)
所有Java对象都从Object
类继承。 因此, Object
的方法可用于所有Java对象。 这些方法之一是equals()
。
默认情况下,类Object
equals()
的实现与==
运算符相同。
如果程序员希望使用equals()
来测试对象的值相等性,则他必须重写equals()
并提供自己的实现(该行为应符合equals()
的一般约定;请参阅Javadoc)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.