使用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
康斯坦丁·约夫科夫(Konstantin Yovkov):

longWrapper.equals(0)返回false,因为0已自动装箱到Integer,而不是Long由于两种类型不同,所以.equals()返回false

同时,longWrapper == 0is是true,因为该longwrapper值未对装箱00 == 0而未考虑实际的原始类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Yaml IEnumerable类进行序列化会产生奇怪的输出

何时使用包装器类和原始类型

使用 ArrayUtils 将包装类数组转换为原始数组

将包装器类和基元与==运算符进行比较时,类型转换背后的逻辑是什么?

通过Lua包装器访问C ++类状态会产生垃圾值

将非构造函数参数变量从派生类传递给基类构造函数会导致奇怪的行为

使用参数作为属性选择器进行比较的 Javascript sort() 在 Chrome 上产生奇怪的结果

是否可以将原始包装器类(整数,双精度型等)和字符串近似为基于值的类?

使用 is 运算符将 Python 类与 None 进行比较

整数和字符原始包装器类命名的原因

如何通过反射获取原始包装器类构造函数?

Java:铸造原始包装类

JAXB编译器将xs:boolean绑定到Java布尔包装器类,而不是布尔原始类型

使用比较器对 Java 中列表的包装类施加顺序(而不是排序)

使用惰性参数初始化类时,Scala编译器的奇怪行为

将类类型与继承进行比较

python模式装饰器中的奇怪类行为

将@AutoValue与嵌套类一起使用会产生“找不到符号”错误

使用PDO将数据写入DB会产生奇怪的结果

什么是包装器类?

StampedLock与线程类的奇怪行为

PHP活动类的奇怪行为

将Mockito增强类与常规类进行比较

在不提供输入的情况下调用迭代器函数会产生奇怪的行为吗?

C ++-使用与包装数据相同的语法构造包装器类

JPA(休眠)列映射中的原始类和包装器类有什么区别?

使用Java Long包装器与原始long进行加法运算

将多个类与Jquery选择器上的变量进行比较

在 SSE 中进行比较时的奇怪行为