【发布时间】:2019-08-05 15:07:03
【问题描述】:
我有这个 Java 代码:
public class Foo {
public static void main(String[] args) {
Integer x = 5;
Integer y = 5;
System.out.println(x == y);
}
}
是否保证在控制台上打印true?我的意思是,它是按值(这是我需要做的)还是通过引用身份比较两个装箱整数?
另外,如果我将它们转换为像这样的未装箱整数会有什么不同
public class Foo {
public static void main(String[] args) {
Integer x = 5;
Integer y = 5;
System.out.println((int) x == (int) y);
}
}
【问题讨论】:
-
它通过引用身份比较它们。
-128到127范围内的整数被缓存,这就是为什么 Integer 实例有时是相同的引用。但是你最好使用equals。 -
问题是,如果我写
(int) x == (int) yIDE(我正在使用 intellijIdea)告诉我演员表是不必要的 -
如果需要你可以使用
x.intValue() == y.intValue(),但最好使用x.equals(y) -
@oggioniw 如果其中一个可能为空,则需要对其进行空检查(或使用
Objects.equals)。使用.equals或.intValue()或(int)all 可能会引发NullPointerException。 -
@khelwood +1 建议使用Objects.equals
标签: java