Java自动拆装箱

写在前面

最近在看《算法4》这本书,看到里面讲解java泛型和自动拆箱装箱的问题,原来看过的一些java书籍和视频也提到过,但是一直都没有怎么理解,在这里了解清楚了,遂写下这篇博客做个笔记。

Java泛型(generics)

Java是在JDK1.5的时候引入泛型这个概念的。允许在定义类和接口的时候使用类型参数。声明的类型参数在使用的时候用具体的类型来替换。理解泛型之前我们需要先来了解下类型擦除(type erasure)。

在生成Java字节代码中的时候是不包含泛型中的类型的。比如Set和Set会被编译器在编译的时候去掉。这个过程就称为类型擦除。在JVM看来只有Set。

泛型的最主要的应用是在集合类框架中。

自动拆装箱

类型参数必须被实例化为引用类型,因此Java有一种特殊机制来使泛型代码能够处理原始数据类型。Java的封装类型都是原始数据类型所对应的引用类型:Boolean、Byte、Double等分别对应着boolean、byte、double等。在处理赋值语句、方法的参数和算术或逻辑表达式时,Java会自动在引用类型和对应的原始数据类型之间进行转换。下面看一段代码:

1
2
3
Stack<Integer> stack = new Stack<Integer>();
stack.push(17); //自动装箱(int -> Integer)
int i = stack.pop(); //自动拆箱(Integer -> int)

自动装箱:自动将一个原始数据类型转换为一个封装类型;
自动拆箱:自动将一个封装类型转换为一个原始数据类型。

您的支持将鼓励我继续创作!