您的位置:首页 > 编程语言 > Java开发

谈谈Java中对象的比较

2006-05-02 09:54 288 查看
看看程序,说出你的结果(我最后再给出答案)
程序一:
public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
}

你的结果如果是true和false的话,那么很不幸告诉你这是错误的答案,如果你不信的话可以在程序中试试,现在讲一下为什么。
Java中比较对象的时候和C或者C++中不一样,Java比较的是对象的句柄(关于句柄可以看我前两天写的谈谈Java中重要的基础知识中关于句柄的介绍),不是对象的内容,所以上面的例子中虽然n1和n2对象的内容一样,但是他们的句柄并不一样(有点像C++中两个指针指向同一内容,但是指针不一样)

程序二:
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));
}
}
程序的结果就不要我再说了吧!!

程序三:

class Value {
Value(int i)
{
data=i;
}
int data;
}

public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value(47);
Value v2 = new Value(47);
System.out.println(v1.equals(v2));
}
}

仔细考虑一下,如果你认为结果是false的话,那么恭喜你,你已经进步了,现在讲讲为什么.
由于equals()方法默认比较的是句柄,解决的方法是在Value类中覆盖equals()方法.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: