class Value
{
 int i;
}
public  class EqualsMethod
 public  static void main(String args[])
{
   Value v1=new Value();
   Value v2=new Value();
   v1.i=v2.i=100;
   System.out.println(v1.equalss(v2));
}
}
为啥是false? ,书上说这是由于equals的默认行为是比较引用。所以除非在自己的新类中覆盖equals()方法。

解决方案 »

  1.   

    System.out.println(v1.i.equals(v2.i));this will be true.
      

  2.   

    v1和v2不是同一个对象的引用,当然要返回false
    对象的成员变量与对象的引用没有任何关系.
      

  3.   

    书上说的没错,Java的类型默认都是继承自Object的,如果Value类中没有覆盖equals()方法,v1在调用equals()方法时会调用Value的基类Object的equals()方法,而基类是比较引用的,所以结果是false。
      

  4.   

    v1 and v2 have same field 'i', which equals 100;
    but have different memory reference, since v1 is a object and v2 is another object
      

  5.   

    默认确实是比较,对对象来说,比较的是放对象的堆区内存地址。v1和v2的i值一样,但是v1和v2本身都是new出来的,都是“新建立”的内存空间,所以不一样,所以false
      

  6.   

    v1,v2两不同的对象啊。肯定为false.
      

  7.   

    Object 类 equals 源代码:    public boolean equals(Object obj) {
    return (this == obj);
        }
      

  8.   

    应该覆盖继承自 Object 的 equals 并实现真正的相等测试: public boolean equals(Object obj) {
    if (obj == this) return true;
    if (obj == null) return false;
    if (obj.getClass() != this.getClass()) return false;
    Value other = (Value) obj;
    return this.i == other.i;
    }
      

  9.   

    楼上正解,这是最完美的equals实现,支持,收录到易载
    易载--个人网上资料收集必备工具。选中想收藏的文字(图片),右键选“收录到易载”,搞定!
      

  10.   


    这么写会报错,这样就没事了System.out.println((v1.i)==(v2.i))