小编典典

为什么 == 与 Integer.valueOf(String) 的比较对 127 和 128 给出不同的结果?

all

我不知道为什么这些代码行返回不同的值:

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,第二个返回false127和之间有什么我不知道的不同128吗?(当然我知道127< 128。)

另外,为什么第三个返回true


阅读 117

收藏
2022-07-29

共1个答案

小编典典

这里有一个显着的区别。

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

  • 对于您正在使用的等价运算符和您拥有的数据类型(即intInteger. 当然,你会从右手边得到一个Integerfrom 。valueOf

  • 转换后,您将比较两个原始int值。比较的发生就像您对原语所期望的那样,因此您最终比较128128

2022-07-29