== 比较的是两个对象的引用地址是否相同;
equals 比较的是两个对象的实际内容是否相同。
例子:
public class EqualsMethod {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1.equals(n2));
}
}
/*
ouput:
false
true
*/
不过有种情况例外:
class Value {
Integer i;
}
public class EqualsMethod {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1 == v2);
System.out.println(v1.equals(v2));
}
}
/*
ouput:
false
false
*/
第一个输出为 false 是因为 new 的两个对象的引用地址不同,所以会为 false,
第二个输出为 false 是因为 equals 的默认行为是比较引用地址是否相同,而 Value 类没有在自己的类中重写 equals 方法,所以输出会为false