Java自动拆箱装箱以及缓存

本文详细介绍了Java的8种基本数据类型,包括整数、浮点数、布尔和字符类型,以及它们对应的装箱类型。探讨了装箱类型的作用和实现原理,解释了自动拆箱与装箱的过程,以及整数类型在-128至127范围内使用缓存的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java的基本数据类型

Java的基本数据类型有8种
整数:byte、short、int、long
浮点数:float、double
布尔:boolean
字符:char

他们对应的装箱类型如下:
除了字符类型的装箱类型是Character以及int的装箱类型是Integer,其余的都是基本类型的首字母大写

为什么需要装箱类型

为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作

自动拆箱与装箱
Integer i =10;  //自动装箱
int b= i;     //自动拆箱

那么jvm是如何做到的呢?经过反编译class文件后,得到下面的代码

Integer i=Integer.valueOf(10);
int b=i.intValue();

由此可知啊,装箱是通过包装类型的valueOf()方法来实现的,拆箱是通过包装类型的xxxValue()方法来实现的

自动拆装箱与缓存

缓存仅仅对整数类型的自动拆装箱生效,即对于byte、int、short、long的自动拆箱装箱
当数值在-128~127之间,会从缓存中取出对应数值的Byte/Integer/Short/Long对象,若是超过了这个数值,则会创建新的对象
这一点可以从源码中看到,例如:查看Integer的valueOf()方法:

	public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

由此我们也可以展开一下,如是通过自动装箱类型得到的两个对象,且数值在-128~127之内,那么两个对象其实就是一个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值