自动装箱和自动拆箱

自J2SE 5.0起,Java提供基本数据类型的自动装箱和自动拆箱功能。自动装箱是将原生类型转换为对应对象包装类型,反之则为自动拆箱,这都是编译器完成的操作。如int装箱会执行Integer.valueOf(int i),特定范围值返回缓存对象。

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

 

什么是自动装箱和自动拆箱

       基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 自动装箱是java编译器在java原生类型和对应的对象包装类型上做的自动转换。例如,把int 装换成 Integer double转换成Double等等。如果是反过来转换,那么叫做自动拆箱,也是编译器为我们做的事情。

自动装箱

int a = 10;
Integer b = a;//装箱,相当于编译器自动作以下的编译:Integer b = Integer.valueOf(10);

 自动拆箱

Integer b = 10;
int a = b;//拆箱,实际上执行了 int c = b.intValue();

   int 的自动装箱,是系统执行了 Integer.valueOf(int i),下面看看Integer.java的源码:

 

public static Integer valueOf(int i) {
    if(i >= -128 && i <= IntegerCache.high)  // 没有设置的话,IngegerCache.high 默认是127
        return IntegerCache.cache[i + 128];
    else
        return new Integer(i);
}

     对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象)

下面测试一下:

 

public static void main(String[] args) {
			Integer aa=127;
			Integer bb=127;
			boolean flag1 = aa==bb;//结果为true
			System.out.println(flag1);
			Integer cc=129;
			Integer dd=129;
			boolean flag2 = cc==dd;//结果为false
			System.out.println(flag2);
			
	}

运行结果:

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值