对于对象,== 与 != 比较的是引用;对于基本类型,比较的是内容。
public class Equivalence(){ 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 != n2); } }/* Output: false true *///:~
包装类都是引用数据类型。
非基本数据类型的对象,比较内容时,可以使用对应的equals()。如果在该类中,没有重写Object的equals方法,那么会默认比较引用,就不可能出现我们希望的
行为。
如下边代码:
1 class Value(){ 2 int i; 3 } 4 5 6 public class EqualsMethod2(){ 7 Value v1 = new Value(); 8 Value v2 = new Value(); 9 v1.i = v2.i = 100; 10 System.out.println(v1.equals(v2)); 11 }/* Output 12 false 13 *///:~
如果在Value类中重写equals(),比较内容的话,结果会改变。
1 public class Test { 2 public static void main(String[] args) { 3 Value v1 = new Value(); 4 Value v2 = new Value(); 5 v1.i = v2.i = 100; 6 System.out.println(v1 == v2); 7 System.out.println(v1.equals(v2)); 8 } 9 } 10 11 class Value{ 12 int i; 13 public boolean equals(Object obj) { 14 if(this == obj) 15 return true; 16 if(obj instanceof Value) { 17 Value anValue = (Value)obj; 18 if(i == anValue.i) 19 return true; 20 } 21 return false; 22 } 23 } 24 25 /* Output 26 false 27 true 28 *///:~