考虑下面的代码快照。
我们使用 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
,而不是 长
。由于这两种类型不同,.equals()
返回 false
。
与此同时,longWrapper == 0
为 true
,因为 longwrapper
值被拆箱为 0
, 和 0 == 0
而不考虑实际的原始类型。
关于java - 使用 equals() 将包装类与原语进行比较会产生奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28623923/