Java中自动装箱整数对象的比较

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