自动装箱
Java自动将基本数据类型值转换成对应的对象,
比如将int的变量转换成Integer对象,这个过程叫做装箱;
反之将Integer对象转换成int类型值,这个过程叫做拆箱。
因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。
基本数据类型与封装类的对应关系
基本数据类型
byte, short, char, int, long, float, double 和 boolean
对应的封装类为
Byte, Short, Character, Integer, Long, Float, Double, Boolean
自动装箱和拆箱的原理
自动装箱时编译器调用valueOf将原始类型值转换成对象,
同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。
通过分析源码发现,
只有double和float的自动装箱代码没有使用缓存,
每次都是new 新的对象,
其它的6种基本类型都使用了缓存策略。
使用缓存策略是因为,
缓存的这些对象都是经常使用到的(如字符、-128至127之间的数字),
防止每次自动装箱都创建一此对象的实例。
而double、float是浮点型的,
没有特别的热的(经常使用到的)数据的,
缓存效果没有其它几种类型使用效率高。