加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

当它们是.equals()时,Java整数总是==吗?

发布时间:2020-12-15 04:47:06 所属栏目:Java 来源:网络整理
导读:参见英文答案 Java: Integer equals vs. ==????????????????????????????????????5个 通常,使用==无法比较Java库中对象的引用,但我刚刚检查过: Integer x = 5;Integer y = x + 1;Integer z = y - 1;x.equals(z)true (boolean)x == ztrue (boolean) 这只是我
参见英文答案 > Java: Integer equals vs. ==????????????????????????????????????5个
通常,使用==无法比较Java库中对象的引用,但我刚刚检查过:

Integer x = 5;
Integer y = x + 1;
Integer z = y - 1;
x.equals(z)
true   (boolean)
x == z
true   (boolean)

这只是我的IDE的工件,还是Java Integer对象保证在它们具有相同值时指向相同的Integer?后一种保证会简化我正在编写的一些代码.

解决方法

Are Java Integers always == when they’re .equals()?

不可以.在正常情况下,在尝试进行数值比较时,不能依赖于==和Integer实例.为此,您必须在比较之前将它们解包为int,或者使用equals.

您在示例中看到的是JDK缓存并重用有限数量的Integer实例(对于表示-128到127的整数).从Integer.valueOf(int)开始:

This method will always cache values in the range -128 to 127,inclusive,and may cache other values outside of this range.

现在,您的代码使用装箱转换而不是Integer.valueOf,而装箱转换使用Integer.valueOf的规范doesn’t say,但它可能正是他们所做的(实际上;例如,拳击转换和整数. valueOf使用相同的底层机制和缓存).

如果使用不同的值,您可以看到==对于Integer实例不可靠:(live copy)

Integer x = 524;    // <==== Changed
Integer y = x + 1;
Integer z = y - 1;
System.out.println("equals? " + x.equals(z));
System.out.println("==? " + (x == z));

输出(可能,这是我在IDEOne上得到的,但是文档再次说Integer可以缓存其他值):

equals? true
==? false

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读