一、基础类型和包装类型对照
对照表
基础类型 | 包装类型 |
---|---|
byte | java.lang.Byte |
short | java.lang.Short |
int | java.lang.Integer |
long | java.lang.Long |
float | java.lang.Float |
double | java.lang.Double |
boolean | java.lang.Boolean |
char | java.lang.Character |
继承树
二、基础类型和包装类型的区别
- 包装类型是对象,基础类型不是
- 包装类型的变量存储在堆中,基础类型的变量存储在虚拟机栈的栈帧中
- 包装类型可以用于容器和泛型,基础类型不可以
- 包装类型的对象是引用类型,默认值为null,而基础类型的默认值都不是null
- 如果一个包装类型的引用为null,则将其转换为基础类型会报空指针异常
- 包装类型的内存占用比基础类型大
- 包装类型不能直接进行算数运算(必须通过自动拆箱),基础类型可以直接进行算数运算
- 包装类型的运算消耗比基础类型大,因为伴随着自动装箱和拆箱
三、自动装箱(Autoboxing)和拆箱(Unboxing)
自动装箱(Autoboxing)
自动装箱是指java编译器将基础类型自动转换为对应的包装类型。
- 什么时候发生自动装箱:
- 传参:作为参数传递给需要相应包装类对象的方法
Integer a = 10;//Integer a = Integer.valueOf(10);
- 赋值:赋值给相应包装器类的变量
public static Integer show(Integer iParam){ System.out.println("autoboxing example - method invocation i: " + iParam); return iParam; } show(3); //autoboxing
- 传参:作为参数传递给需要相应包装类对象的方法