考虑下面的代码捕捉。
我们使用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 == 0true,因为longwrapper值未装箱到00 == 0而不考虑实际的原始类型。

07-27 13:30