2017-03-27 34 views
-2
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()方法返回false?

==操作测试两个变量是否具有相同的引用(又名指向一个内存地址)。

equals()方法测试两个变量是否引用具有相同状态(值)的对象。

这里,因为o1o2参考两个不同的对象,我明白为什么==返回false。

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

+0

也许是因为必须**重写equals方法? –

+5

请参见[Object.equals](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang。Object-“类Object的equals方法实现了对象上最可能的等价关系;也就是说,对于任何非空引用值'x'和'y',这个方法返回true当且仅当'x '和'y'表示同一个对象('x == y'的值为true)。“如果你想要更少的歧视,你必须“覆盖”等于并改变行为。 – khelwood

+0

'Object.equals'使用'=='作为比较器。 – Oneiros

回答

3

equals()通过java.lang.Object提供的实施是定义返回false,除非引用指的是同一个对象,在这种情况下它返回true

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

2

你必须写自己的equals方法,它覆盖的class Objectequals方法,因为该方法返回true如果this对象是一样的,在参数中的对象和false否则。

Object类的equals方法实现对象上最可能的等价关系;即,对于任何非空参考值xy,此方法返回true当且仅当xy指代相同的对象(x == y具有值true)。 (有关更多信息,请参阅Javadoc)

1

所有Java对象都继承自Object类。因此,所有Java对象都可以使用Object的方法。其中一种方法是equals()

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

如果程序员希望使用equals()测试对象的值相等时,他必须重写equals(),并提供了自己的实现(即应遵守的equals()的总承包;指的Javadoc)。

+1

您的第二段特别好放。有一个upvote! – Bathsheba

相关问题