首页 > 解决方案 > 在Java中将两个“整数”值与“==”进行比较是否安全?

问题描述

我有这个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);
    }
}

标签: java

解决方案


不,这不是比较Integer对象的正确方法。你应该使用Integer.equals()orInteger.compareTo()方法。

默认情况下,JVM 将缓存Integer[-128, 127] 范围内的值(请参阅java.lang.Integer.IntegerCache.high属性),但不会缓存其他值:

Integer x = 5000;
Integer y = 5000;
System.out.println(x == y); // false

拆箱int或调用Integer.intValue()将创建一个int可以安全地与==运算符进行比较的原语。但是拆箱 anull将导致NullPointerException.


推荐阅读