问题描述
这里有一个显着的区别。
valueOf
正在返回一个Integer
对象,该对象的值可能缓存在 -128 和 127 之间。这就是为什么第一个值返回true
- 它被缓存
- 而第二个值返回false
- 128 不是缓存值,所以你得到两个单独的Integer
实例.
的是,您将引用与 进行比较Integer#valueOf
,如果您比较的值大于缓存支持的值,则即使解析的值相等(例如:) ,它也 评估为。您 必须 改用。true``Integer.valueOf(128) == Integer.valueOf(128)
__equals()
parseInt
正在返回一个原语int
。这就是为什么第三个值返回true
-128 == 128
被评估,当然是,true
。
现在,恰好产生了第三个结果true
:
-
对于您正在使用的等价运算符和您拥有的数据类型(即
int
和Integer
. 当然,你会从右手边得到一个Integer
from 。valueOf
-
转换后,您将比较两个原始
int
值。比较的发生就像您对原语所期望的那样,因此您最终比较128
和128
。
解决方法
我不知道为什么这些代码行返回不同的值:
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
?