考虑以下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。
true
false
如果这是故意的行为,这将如何帮助Java编程?
如果这不是故意行为,那么这是否是Java中的缺陷?
我将保留您的问题,但您应该知道,如果该问题的目的是让您学习并且您的解决方案是询问StackOverflow,那么您会很受伤。那边…
此行为是故意的。
默认equals()方法on java.lang.Object比较 内存地址 ,这意味着所有对象都互不相同(仅对同一对象的两个引用将返回true)。
equals()
java.lang.Object
java.lang.Integer覆盖此比较 值 的的IntegerS,SO两个不同Integerš都表示两个比较相等的数量。如果==改用,false两种情况都可以得到。
java.lang.Integer
Integer
==
Java的标准做法是重写equals方法,以返回true具有相同 逻辑 值的对象,即使它们是在不同的时间(甚至使用不同的参数)创建的也是如此。如果您没有办法问“这两个东西代表相同的值吗?”,让对象代表数字不是很有用。
equals
顺便说一句,这是一个切线,Java实际上Integer为小值保留了对象的缓存。因此,有时您可能会得到两个Integer对象,即使从两个不同的来源获取它们,即使==操作员也会返回true它们。您甚至可以获得代码,它们对较大的整数的行为与对较小的整数的行为有所不同,而无需查看整数值!