小编典典

Java中equals()方法的行为

java

考虑以下Java代码:

    Object a = new Integer(2);
    Object b = new Integer(2);
    System.out.println(a.equals(b));

    Object x = new Object();
    Object y = new Object();
    System.out.println(x.equals(y));

第一个打印语句打印true,第二个打印语句false

如果这是故意的行为,这将如何帮助Java编程?

如果这不是故意行为,那么这是否是Java中的缺陷?


阅读 224

收藏
2020-11-01

共1个答案

小编典典

我将保留您的问题,但您应该知道,如果该问题的目的是让您学习并且您的解决方案是询问StackOverflow,那么您会很受伤。那边…

此行为是故意的。

默认equals()方法on java.lang.Object比较 内存地址
,这意味着所有对象都互不相同(仅对同一对象的两个引用将返回true)。

java.lang.Integer覆盖此比较
的的IntegerS,SO两个不同Integerš都表示两个比较相等的数量。如果==改用,false两种情况都可以得到。

Java的标准做法是重写equals方法,以返回true具有相同 逻辑
值的对象,即使它们是在不同的时间(甚至使用不同的参数)创建的也是如此。如果您没有办法问“这两个东西代表相同的值吗?”,让对象代表数字不是很有用。

顺便说一句,这是一个切线,Java实际上Integer为小值保留了对象的缓存。因此,有时您可能会得到两个Integer对象,即使从两个不同的来源获取它们,即使==操作员也会返回true它们。您甚至可以获得代码,它们对较大的整数的行为与对较小的整数的行为有所不同,而无需查看整数值!

2020-11-01