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


当我们将一个int赋值给Integer对象时,它首先会被转换为Integer对象,然后才会赋值。此过程被称为自动装箱。但在使用 == 运算符比较此类对象时,您应该注意某些事项。请先参阅以下示例。

示例

运行演示

public class Tester {
   public static void main(String[] args) {

      Integer i1 = new Integer(100);
      Integer i2 = 100;        
      //Scenario 1:
      System.out.println("Scenario 1: " + (i1 == i2));

      Integer i3 = 100;
      Integer i4 = 100;        
      //Scenario 2:
      System.out.println("Scenario 2: " + (i3 == i4));

      Integer i5 = 200;
      Integer i6 = 200;        
      //Scenario 3:
      System.out.println("Scenario 3: " + (i5 == i6));

      Integer i7 = new Integer(100);
      Integer i8 = new Integer(100);
      //Scenario 4:
      System.out.println("Scenario 4: " + (i7 == i8));
   }
}

输出

Scenario 1: false
Scenario 2: true
Scenario 3: false
Scenario 4: false
  • 场景 1 - 两个 Integer 对象被创建。第二个是自动装箱导致的。== 运算符返回 false。

  • 场景 2 - 自动装箱后只创建一个对象,并将它缓存起来,因为如果值在 -127 到 127 之间,Java 会缓存对象。== 运算符返回 true。

  • 场景 3 - 自动装箱导致两个 Integer 对象被创建,且未进行缓存。== 运算符返回 false。

  • 场景 4 - 两个 Integer 对象被创建。== 运算符返回 false。

更新时间: 2020年6月18日

247 次浏览

开启您的 职业生涯

完成课程并获得认证

开始
广告