java - 使用 equals() 将包装类与原语进行比较会产生奇怪的行为

标签 java wrapper equals

考虑下面的代码快照。 我们使用 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 == 0true,因为 longwrapper 值被拆箱为 0 , 和 0 == 0 而不考虑实际的原始类型。

关于java - 使用 equals() 将包装类与原语进行比较会产生奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28623923/

相关文章:

java - Java中的时间常数?

c++ - 如何将原始 Haskell 绑定(bind)编译到 OpenCV 又名 GitHub 成员 arjuncomar 的 OpenCV-Raw 仓库

.net - 如何在.net项目中使用C++类库

equals - 这个 HashSet 测试示例可能吗?

java - Arrays.deepEquals 在 2 个相同的数组上返回 false

java - Pangram 在 Java 中使用哈希集

java - 如何访问匿名对象内声明的字段?

java - 这等于实现吗?

java - 滚动结束时无法摆脱浅灰色

java - Java 服务包装器的 JVM 错误