自动装箱

Java自动将基本数据类型值转换成对应的对象,
比如将int的变量转换成Integer对象,这个过程叫做装箱;
反之将Integer对象转换成int类型值,这个过程叫做拆箱。
因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。

基本数据类型与封装类的对应关系

基本数据类型
byte, short, char, int, long, float, doubleboolean 
对应的封装类为
Byte, Short, Character, Integer, Long, Float, Double, Boolean

自动装箱和拆箱的原理

自动装箱时编译器调用valueOf将原始类型值转换成对象,
同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。

通过分析源码发现,
只有doublefloat的自动装箱代码没有使用缓存,
每次都是new 新的对象,
其它的6种基本类型都使用了缓存策略。

使用缓存策略是因为,
缓存的这些对象都是经常使用到的(如字符、-128127之间的数字),
防止每次自动装箱都创建一此对象的实例。

而doublefloat是浮点型的,
没有特别的热的(经常使用到的)数据的,
缓存效果没有其它几种类型使用效率高。