当它们是.equals()时,Java整数总是==吗?
参见英文答案 >
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?后一种保证会简化我正在编写的一些代码. 解决方法
不可以.在正常情况下,在尝试进行数值比较时,不能依赖于==和Integer实例.为此,您必须在比较之前将它们解包为int,或者使用equals. 您在示例中看到的是JDK缓存并重用有限数量的Integer实例(对于表示-128到127的整数).从
现在,您的代码使用装箱转换而不是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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |