当我们将一个int分配给Integer对象时,首先将其转换为一个Integer对象,然后进行分配。此过程称为自动装箱。但是在使用==运算符比较此类对象时,您应该考虑某些事项。首先请参见下面的示例。
public class Tester {
public static void main(String[] args) {
Integer i1 = new Integer(100);
Integer i2 = 100;
//方案1:
System.out.println("方案1: " + (i1 == i2));
Integer i3 = 100;
Integer i4 = 100;
//方案2:
System.out.println("方案2: " + (i3 == i4));
Integer i5 = 200;
Integer i6 = 200;
//方案3:
System.out.println("方案3: " + (i5 == i6));
Integer i7 = new Integer(100);
Integer i8 = new Integer(100);
//方案4:
System.out.println("方案4: " + (i7 == i8));
}
}输出结果
方案1: false 方案2: true 方案3: false 方案4: false
方案1-创建两个Integer对象。第二个是由于自动装箱。==运算符返回false。
方案2- 自动装箱后仅创建一个对象,并且如果值介于-127到127之间,则Java缓存对象将被缓存。==运算符返回true。
方案3-由于自动装箱而创建了两个Integer对象,并且没有发生缓存。==运算符返回false。
方案4-创建两个Integer对象。==运算符返回false。