我有以下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);
}
}
答案 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;
}