定义:编译器自动对基础数据类型和其包装类进行转化,这种转化对程序员是透明的。
装箱:调用包装类的 valueOf()
方法
拆箱:调用包装类的.***Value()
方法
主要应用在以下方面
进行 =
赋值操作(装箱或拆箱)
进行+,-,*,/
混合运算 (拆箱)
进行>,<,==
比较运算(拆箱)
调用equals
进行比较(装箱)
ArrayList,HashMap
等集合类 添加基础类型数据时(装箱)
数据对比
1 int a = 100; Integer b = 100; sout(a == b);
2 Integer a = 100; Integer b = 100; sout(a == b);
3Integer a = 200; Integer b = 200; sout(a == b);
结果
1 true
自动拆箱
2 true
3 false
原因,看代码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
为什么要有基本数据类型的包装类
1 基本数据类型可以让程序更高效
2 java是面向对象编程的,基本数据类型并不是对象,不具有对象的性质。添加包装类,可以封装属性和方法,就有对象的特性。
3 容器里不能添加基本数据类型。如List, Map, Set
基本数据类型和其包装类
boolean, byte, char, float, int, long, short, double Boolean, Byte, Character, Float, Integer, Long, Short, Double
具体可参考5分钟彻底理解-Java自动装箱、拆箱