在java中我们知道基本数据类型都有对应的包装类,如int的包装类Integer
而自动装箱就是指Java编译器自动将基本数据类型转换它们对应的包装类型,如int转为Integer
自动拆箱则是反过来,Java编译器自动将包装类型转换为它们对应的基本数据类型,如Integer转为int
那么有什么作用呢?
自动装箱和拆箱是在java1.5之后引用的,在那之前我们要将int变为Integer或者将Integer变为int,都需要像下面这样手动去设置,很麻烦
引入自动装箱和拆箱后,我们就不需要再手动转换了,简化了代码编写
弊端
频繁的自动装箱和拆箱会带来性能影响,比如在循环中频繁发生自动装箱拆箱
那么每次sum+=i的时候,都会发生一次自动拆箱将sum与i相加,相加后再一次自动装箱生成新的Integer对象作为sum,所以循环结束后我们就会创建1000个无用的Integer对象,假想一下假如循环的一次不是1000,而是更大的数,程序的性能是不是就会受到影响,也增加了垃圾回收的工作量
另外还有可能出现空指针异常,因为我们知道包装类是可以为null的,而基本数据类型是不能为null的,如果包装类的值为null,在自动拆箱时就会发生空指针异常,如
Integer sum = null;
int num = sum;