JAVA拆装箱(缓存池)

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方法的实现是类似的
每次都是返回不同的对象

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容