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
*///:~
为什么都是比较的对象,为什么结果不同?
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帮你写好了......
话说我是.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了。。。