int和Integer之理解自动拆箱与装箱

自动装箱是一种语法糖,发生在编译阶段,也就是生成的字节码是一致的。

public class Test22 {

    public static void main(String[] args) {

        Integer integer=1;
        int a=integer++;
    }
}

反编译之后

Compiled from "Test22.java"
public class Test22 {
  public Test22();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_1
       1: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       4: astore_1
       5: aload_1
       6: astore_3
       7: aload_1
       8: invokevirtual #3                  // Method java/lang/Integer.intValue:()I
      11: iconst_1
      12: iadd
      13: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      16: dup
      17: astore_1
      18: astore        4
      20: aload_3
      21: invokevirtual #3                  // Method java/lang/Integer.intValue:()I
      24: istore_2
      25: return
}

  • 装箱:基本类型=》对应的引用类型
  • 拆箱:对应的引用类型=》基本类型
发布了212 篇原创文章 · 获赞 37 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_23864697/article/details/104985147