在Java中将两个“整数”值与“ ==”进行比较是否安全?

时间:2019-03-14 16:12:59

标签: 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);
    }
}

2 个答案:

答案 0 :(得分:12)

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

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

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

int进行拆箱或调用Integer.intValue()将创建一个int原语,可以与==运算符进行安全比较。但是,将null拆箱会得到NullPointerException

答案 1 :(得分:0)

不,这不是直接与对象进行比较的正确方法。您可以将其转换为int值并进行比较。

Java实现

其中值是int类型。

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }