JAVA装箱
自动将数据基本类型转换为包装类
Integer a = '1';
JAVA拆箱
自动将包装类转换为数据基本类型
int b = a;
拆装箱的实现
装箱的过程是调用包装类的valueOf方法实现的,而拆箱过程是调用包装类的xxxValue方法实现的
比如intValue doubleValue等
缓存池
Integer a = 1;
Integer b = 1;
Integer c = 200;
Integer d = 200;
a == b; -- true
c == d; -- false
Double e = 1.0;
Double f = 1.0;
Double g = 1.0;
Double h = 1.0;
e == f; -- false
g == h; -- false
因为valueOf方法分为两类
Integer派别:Integer、Short、Byte、Character、Long
valueOf()方法实现:先判断值是否在缓存池中,如果在的话,则返回缓存池中的内容,如果没有,则创建一个对象,返回该对象的引用地址。他们在缓存池中会默认的创建一些数据,也就是说在i >= 128 || i < -128是会创建不同的对象,在i < 128 && i >= -128会根据i的值返回已经创建好的指定的对象
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)//在-128和127之间,返回缓存池的对象,即IntegerCache.cache
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);//不在这个范围内的,则新建一个对象
}
Integer【-128-127】
Short 【-128-127】
...
Double派别:Double、Float的valueOf方法的实现是类似的
每次都是返回不同的对象