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()方法不是比较的两个对象的值吗,这两个例子中两个对象的值都是相等的阿

解决方案 »

  1.   

    equals并不是比较值,他和==一样比较的是引用,第一个是因为Integer覆盖了Object的equals方法,比较的是数值,第二个没有覆盖,所意仍然比较引用。
      

  2.   

    在Value类中重写equals 方法就好了
      

  3.   

    equals()方法默认的仍然是比较引用,不是比较值,但是很多类库都已经覆盖了该方法,所以使用时已经是比较值了,如果你自定义了类,那么需要覆盖该方法,不然,仍然是比较引用,不是比较值《JAVA编程思想 forth edit》里,这样说的
      

  4.   

    同意楼上的。
    需要重写Value的equeals方法