考虑下面的代码捕捉。
我们使用equals()
比较对象是否有意义吗?
这里两个值有意义地相等,但是longWrapper.equals(0)
为什么返回false
吗?
当我将这两个值与==
运算符进行比较时,它将返回true
。
Long longWrapper = 0L;
long longPrimitive = 0;
System.out.println(longWrapper == 0L); // true
System.out.println(longWrapper == 0); //true
System.out.println(longWrapper == longPrimitive); //true
System.out.println(longWrapper.equals(0L)); //true
System.out.println(longWrapper.equals(0)); //false
System.out.println(longWrapper.equals(longPrimitive)); //true
最佳答案
longWrapper.equals(0)
返回false
,因为0
自动装箱到Integer
而不是Long
。由于两种类型不同,因此.equals()
返回false
。
同时,longWrapper == 0
是true
,因为longwrapper
值未装箱到0
和0 == 0
而不考虑实际的原始类型。