等于Object中的实现

问题描述 投票:0回答:2

我正在阅读Java中的equals方法,我听到有人说==测试参考相等性(它们是否是同一个对象)。 .equals()测试价值平等(它们在逻辑上是否“相等”)。

我相信这是真的,但是,如果你看看.equals()的源代码,它只是推迟到==

从Object类:

    public boolean equals(Object obj) {
    return (this == obj);
}

现在我很困惑。我看到的是我们正在测试当前对象是否具有与显式参数相同的引用。它是测试引用相等还是值相等?

java equals equality
2个回答
5
投票

来自the Javadoc

Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非null参考值xy,此方法返回true当且仅当xy引用相同的对象(x == y具有值true)。

Object是最终的基类,这是它可以提供的equals的唯一定义。没有字段可以跨实例进行比较,因此实例只能等于自身。


你在评论中说过:

我想知道字符串比较我看到人们一直使用它

你的问题是关于Object,而不是StringString凌驾于equals,因为Objectequals的定义不适合String。因此,String定义了它自己的(与equals实现所需的语义一致)。


1
投票

对象没有值来比较任何东西。

但是为了理解,它必须为equals()或hashCode()等方法提供实现。

因此,确切地说:派生自Object的类应该重写equals(),以防它们用“值语义”替换引用相等性。

© www.soinside.com 2019 - 2024. All rights reserved.