微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

这里有一个显着的区别。

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

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。