日期:2014-05-20  浏览次数:20802 次

初学者问个有关 equals的问题
1.
public   class   EqualesMethod   {

            public   static   void   main(String[]   args)   {

Integer   i1   =   new   Integer   (1);
Integer   i2   =   new   Integer   (1);
System.out.println(i1.equals(i2));  
}
}

2.
class   Value
{
int   i;
}

public   class   EqualesMethod   {

public   static   void   main(String[]   args)   {

Value   v1   =   new   Value();
Value   v2=new   Value();
v1.i=v2.i=100;
System.out.println(v1.equals(v2));  
}
}

为什么第一个结果是true,第二个是false阿,equals()方法不是比较的两个对象的值吗,这两个例子中两个对象的值都是相等的阿

------解决方案--------------------
equals并不是比较值,他和==一样比较的是引用,第一个是因为Integer覆盖了Object的equals方法,比较的是数值,第二个没有覆盖,所意仍然比较引用。
------解决方案--------------------
equals()方法默认的仍然是比较引用,不是比较值,但是很多类库都已经覆盖了该方法,所以使用时已经是比较值了,如果你自定义了类,那么需要覆盖该方法,不然,仍然是比较引用,不是比较值《JAVA编程思想 forth edit》里,这样说的