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()
方法测试两个变量是否引用具有相同状态(值)的对象。
这里,因为o1
和o2
参考两个不同的对象,我明白为什么==
返回false。
但是这两个对象都是使用Object
类的默认构造函数创建的,因此它们具有相同的值。为什么equals()
方法返回false?
也许是因为必须**重写equals方法? –
请参见[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
'Object.equals'使用'=='作为比较器。 – Oneiros