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

java programming java8object oriented programming

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


相关文章