数据类型
基本类型 | 包装类型 |
---|---|
byte (8bits 取值范围 -128 ~ 127) | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
拆箱装箱
自动拆箱装箱的原理:
// 所有基本类型都对应有其包装类型
Integer x = 2; // 装箱 实际是Integer x = Integer.valueOf(2)
int y = x; // 拆箱 实际是int y = intValue(x)
字节码层面的原理:编译器调用Integer.valueOf进行装箱,调用Integer.intValue进行拆箱。
// 反编译 class 文件
...
3: invokestatic #7 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
...
12: invokevirtual #13 // Method java/lang/Integer.intValue:()I
总结
- Java中一切皆对象, 但是基本类型不是对象, 所以用包装类型来达到其面向对象的完整性。
- Java的自动装箱拆箱发生在编译器编译的时候。