为什么要与Integer.valueOf(String)进行比较,为127和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?有没有什么不同,我不知道127128之间? (当然我知道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))。你must使用equals()
 parseInt正在返回原始int。这就是为什么第三个值返回true128 == 128被评估,当然true
现在,有一点可以使第三个结果true

  •  An unboxing conversion occurs关于你使用的等价运算符和你拥有的数据类型,即intInteger。当然,您从valueOfInteger右侧获得了Integer
  • 转换后,您将比较两个原始int值。比较发生就像你对原始图像的期望一样,所以你比较128128

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why do == comparisons with Integer.valueOf(String) give different results for 127 and 128?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

34 − = 27