繁体   English   中英

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

[英]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()方法测试两个变量是否引用具有相同状态(值)的对象。

在这里,由于o1o2引用了两个不同的对象,所以我明白了为什么==返回false。

但是这两个对象都是使用Object类的默认构造函数创建的,因此具有相同的值。 为什么equals()方法返回false?

除非引用引用指向同一对象,否则java.lang.Object提供的equals()的实现被定义为返回false ,在这种情况下,它返回true

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

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

类Object的equals方法在对象上实现了最有区别的对等关系。 也就是说,对于任何非空参考值xy ,当且仅当xy引用相同的对象( x == y的值为true )时,此方法才返回true (有关更多信息,请阅读Javadoc)

所有Java对象都从Object类继承。 因此, Object的方法可用于所有Java对象。 这些方法之一是equals()

默认情况下,类Object equals()的实现与==运算符相同。

如果程序员希望使用equals()来测试对象的值相等性,则他必须重写equals()并提供自己的实现(该行为应符合equals()的一般约定;请参阅Javadoc)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM