gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:47:29 24 4
gpt4 key购买 nike

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

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 而第二个返回 false127128 之间是否有我不知道的不同之处? (我当然知道127 <128。)

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

我已阅读答案of this question ,但我还是不明白它如何返回true,以及为什么第二行的代码返回false

最佳答案

这里有一个显着的差异。

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 :

  • An unboxing conversion occurs关于您正在使用的等价运算符和您拥有的数据类型 - 即 intInteger 。您将获得 Integer来自valueOf当然是在右手边。

  • 转换后,您将比较两个基元 int值(value)观。比较的发生正如您对基元的期望一样,因此您最终会比较 128128 .

关于java - 为什么 == 与 Integer.valueOf(String) 的比较对于 127 和 128 给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60842726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com