对象中的equals实现

时间:2018-09-25 11:56:03

标签: java equals equality

我正在阅读有关Java中的equals方法的信息,听说有人说==测试引用是否相等(它们是否是同一对象)。 .equals()测试值是否相等(在逻辑上是否为“相等”)。

我相信这是事实,但是,如果您查看.equals()的源代码,它只是顺应==

来自Object类:

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

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

2 个答案:

答案 0 :(得分:5)

来自the Javadoc

  

Object的equals方法在对象上实现了最有区别的对等关系;也就是说,对于任何非null参考值xy,当且仅当引用truex时,此方法才返回y到同一对象(x == y的值为true)。

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


在评论中您说过:

  

我想了解字符串比较,我看到人们一直在使用它

您的问题询问的是Object,而不是StringString会覆盖equals,因为Objectequals的定义不适用于String。因此,String定义了自己的名称(与equals实现所需的语义保持一致)。

答案 1 :(得分:1)

对象没有可与之进行比较的值。

但是为了有意义,它必须为equals()或hashCode()之类的方法提供实现。

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