class Value {
  int i;
}public class EqualsMethod2 {
  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));
  }
}

解决方案 »

  1.   

    equals()的实现来自Object类,自己打开Object类的源码看看就知道为什么了。如果你要想equals()按照你设计的方式来工作的话,比如比较成员变量i的值,那么你的类必须重写equals()方法,Value类可以写成:class Value {
      int i;  public boolean equals(Object o) {
        return ((Value)o).i == i;
      }
    }
      

  2.   

    v1和v2是两个不同的对象啊,不能因为对象的成员相同就说两个对象也相同啊...v1.equal(v2)是对两个对象引用的比较,而两个对象更定是指向的不同的内存空间,所以其比较的结果就是FALSE了
      

  3.   

    由于v1,v2是两个不同的对象,v1,v2是Value对象的引用,但是由于指向了不同的对象(重新new 了一个),所以equals方法比较的结果是false.
      

  4.   

    class Value {
      int i;
    }public class EqualsMethod2 {
      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));
      }
    }
    如果你的类Value实现了比较的接口,以实现两个对象的比较,当两个对象中的私有数据相等时返回真,否则返回假那你的比较是返回真,否则如上说到的一般的比较是比较两个对象对应的指针是否相同(尽管JAVA中没有提及,但事实应该是指针的比较)
      

  5.   

    严重同步楼上意见,v1和v2是两个不同的对象啊。v1.equal(v2)是对两个对象引用的比较,而两个对象更定是指向的不同的内存空间,所以其比较的结果就是FALSE了
      
     
      

  6.   

    equal()
    方法实际上是指2个对象的是否在同一地址
      

  7.   

    自定义的类都集成了Object类,其中的equal()方法原本定义的是用于比较是否是同一个对象。现在v1和v2并不是同一个对象,所以结果为false.如果想改变成实现比较对象中属性的值的话,可以采用覆盖的方法实现。