jdk1.5之后,java提供了自动将基本类型和对应的包装类型互相转换的功能,称之为自动装箱和自动拆箱。
自动装箱示例:
int n = 1;
Integer m = n;
上面代码编译后的字节码
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: iload_1
3: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
6: astore_2
7: return
可以看到自动装箱是编译器自动调用包装类的valueOf方法实现的
自动拆箱示例
Integer m = new Integer(1);
int n = m;
上面代码对应的字节码
public static void main(java.lang.String[]);
Code:
0: new #2 // class java/lang/Integer
3: dup
4: iconst_1
5: invokespecial #3 // Method java/lang/Integer."<init>":(I)V
8: astore_1
9: aload_1
10: invokevirtual #4 // Method java/lang/Integer.intValue:()I
13: istore_2
14: return
自动拆箱是编译器自动调用xxxValue方法实现的