我不知道为什么这些代码行返回不同的值:
System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));
System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));
System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));
输出为:
true
false
true
为什么第一个返回true
,第二个返回false
?有什么不同,我不知道之间127
和128
?(我当然知道127
< 128
。)
另外,为什么第三个返回true
?
我已经阅读了这个问题的答案,但是我仍然不知道它如何返回true
,以及为什么第二行中的代码返回false
。
这里有一个惊人的区别。
valueOf
正在返回一个Integer
对象,该对象的值可能缓存在-128到127之间。这就是为什么第一个值返回true
-它被缓存-第二个值返回-128 false
不是缓存值,所以得到两个单独的Integer
实例。
这是需要注意的重要,你是比较参考Integer#valueOf
,如果您比较值比什么缓存支持的更大,这将不计算为true
,即使解析的值相等(案例:Integer.valueOf(128) == Integer.valueOf(128)
)。您必须equals()
改为使用。
parseInt
正在返回原始值int
。这就是第三个值返回的原因true
- 128 == 128
被评估,当然是true
。
现在,恰好可以得出第三个结果true
:
对于您正在使用的等价运算符和您拥有的数据类型(即int
和),发生拆箱转换Integer
。当然,您会Integer
从valueOf
右侧获得。
转换后,您正在比较两个原始int
值。就像您期望的那样,比较会发生,因此您结束了比较128
和128
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句