当我们将一个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。