当前位置: 技术问答>java相关
<thinking in java>中的一个小问题。
来源: 互联网 发布时间:2014-12-26
本文导语: 有两段程序如下 : 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)); //true } } ///:~ class Value { ...
有两段程序如下 :
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)); //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)); //false
}
} ///:~
"This is because the default behavior of equals( ) is to compare references." 既然都是比较引用,那么第一个为什么是TRUE呢。。n1 n2应该也是两个不同的引用吧。不是我不明白。这引用也。。。
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)); //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)); //false
}
} ///:~
"This is because the default behavior of equals( ) is to compare references." 既然都是比较引用,那么第一个为什么是TRUE呢。。n1 n2应该也是两个不同的引用吧。不是我不明白。这引用也。。。
|
我记得书上好像写了,是因为默认的equals方法比较的是句柄,当然不一样,要是你想获得和第一例一样的结果,可以在自己的类里重写equals方法
|
这是因为sun在Integer类中重载了equals方法如下:
public boolean equals(Object obj) {
if ((obj != null) && (obj instanceof Integer)) {
return value == ((Integer)obj).intValue();
}
return false;
}
也就是说,只要Integer.intValue()相等,(此例均为47),就返回true。
public boolean equals(Object obj) {
if ((obj != null) && (obj instanceof Integer)) {
return value == ((Integer)obj).intValue();
}
return false;
}
也就是说,只要Integer.intValue()相等,(此例均为47),就返回true。