Integer的自动装箱与拆箱

本文介绍了Java从1.5版本开始引入的自动装箱和拆箱机制,旨在简化基本类型与封装类型之间的转换。以Integer为例,详细解析了Integer.valueOf(int i)的实现,包括对IntegerCache的使用,以及Integer.intValue()方法的作用。同时提醒在面试或笔试中需要注意,当比较两个Integer对象时,由于缓存机制,-128到127之间的值会返回相同的对象,而超出此范围则会创建新的对象。

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

装箱和拆箱

  • 装箱:将基本数据类型转换成封装类型。
  • 拆箱:将封装类型转换成基本数据类型。

自动装箱和自动拆箱

在jdk1.5开始增加了自动装箱和自动拆箱机制,就是为了方便基本类型和封装类型之间的互相转换。
下面来看看自动装箱(拆箱)和显示装箱(拆箱)的例子:

Integer a1 = 3;  // 自动装箱
Integer a2 = Integer.valueOf(3);  // 显示装箱

int a3 = new Integer(3);  // 自动拆箱
int a4 = new Integer(3).intValue();  // 显示拆箱

自动装箱 / 拆箱的实现

其实自动装箱或拆箱是通过编译器自动执行的,当然调用的方法还是一样的。下面来看看源码实现。以Integer为例:

Integer.valueOf(int i)

首先进入valueOf方法。这里先判断传入的值是否在IntegerCache.low和IntegerCache.high范围之内,如果在则从IntegerCache.cache数组中直接返回一个对象,否则就new一个新的对象。

public static Integer valueOf(int i) {
   
   
    // -128 < i < 127,返回一个缓存对象
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值