首页 新闻 会员 周边

不解,求高手帮忙,equals()的用法

0
悬赏园豆:15 [已解决问题] 解决于 2011-07-22 11:54

public class EqualsMethod {
  public static void main(String[] args) {
    Integer n1 = new Integer(47);
    Integer n2 = new Integer(47);
    System.out.println(n1.equals(n2));
  }
} /* Output:
true
*///:~

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));
  }
} /* Output:
false
*///:~

为什么都是比较的对象,为什么结果不同?

11hxian.com的主页 11hxian.com | 初学一级 | 园豆:70
提问于:2011-07-20 23:32
< >
分享
最佳答案
0

class Value {
  int i;

public boolean equals(Object obj) {
 return (this == obj);
    }
}
//字java里面你写的Value object的equals方法只是默认继承了Object父类的空的抽象equals方法,需要自己重写。
而Integer的equals方法是这样的
public boolean equals(Object obj) {
 if (obj instanceof Integer) {
     return value == ((Integer)obj).intValue();
 }
 return false;
    }这是sun帮你写好了......

收获园豆:15
gzxttkx | 菜鸟二级 |园豆:225 | 2011-07-21 10:17
其他回答(1)
0

话说我是.net,不是java,不过无所谓,你的上面的integer是整型,是值类型,下面是你自定义的对象吧?引用类型怎么算相等要你自己去定义,自己实现那个,恩,应该是重写那个equals方法,你现在的v1跟v2只是值相同而已,事实上是两个不同的对象,如果你这样

 

Value v1=new Value();
Value v2
=v1;
v1.i
=200;
System.out.print(v1.equals(v2));

应该就是True了。。

如果你重写这个对象的equals方法,定义只要两个对象的i的值相等就算相等,那么你上面的结果也就是True了。。。

顾晓北 | 园豆:10891 (专家六级) | 2011-07-21 09:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册