这是在Thinking in Java中看到的。
第一个程序
1 public class Exponents { 2 public static void main(String []args){ 3 Integer n1=new Integer(47); 4 Integer n2=new Integer(47); 5 System.out.println(n1==n2); 6 System.out.println(n1!=n2); 7 } 8 }
输出结果:
1 false 2 true
Java中声明的类对象都是引用,n1、n2的内容相同,但两者指向不同的存储位置。
第二个程序
1 public class Exponents { 2 public static void main(String []args){ 3 Integer n1=new Integer(47); 4 Integer n2=new Integer(47); 5 System.out.println(n1.equals(n2)); 6 } 7 8 }
输出结果:true
equals()方法默认的行为是比较引用。但大多数Java类库都实现了equals方法用来比较对象的内容,而非比较对象的引用。
第三个程序:
1 class Value{ 2 int i; 3 } 4 public class Exponents { 5 public static void main(String []args){ 6 Value v1=new Value(); 7 Value v2=new Value(); 8 v1.i=v2.i=100; 9 System.out.println(v1.equals(v2)); 10 } 11 12 }
输出结果:false
自己定义的类,需要覆盖equals()方法。