自动装箱 autoBoxing

自动装箱是java 1.5 引入的新技术,主要是为了解决 原始类型和对象的转换,
也就是 原始类型
byte short int long float double boolean char 与 包装对象
Byte Short Integer Long Float Double Boolean Character
的转换。

  1. 什么是自动装箱?
Integer var1=6;//自动装箱
Integer var2=6;//自动装箱

if(var1==var2){
	System.out.println("true");
}else{
	System.out.println("false");
	}

结果输出:true
int var1=6;
int var2=6;
if(var1==var2){
	sysytem.out.println("true");
}else{
	system.out.println("false");
}

 结果输出: true

自动装箱的处理代码:

Integer var1=Integer.valueOf(6);//实际运行代码
Integer var2=Integer.valueOf(6);//实际运行代码

if(var1==var2){
	System.out.println("true");
}else{
	System.out.println("false");
	}

输出结果是: true

到目前为止,已经知道了自动装箱是用来把原始数据类型转换成对象。

2 . 自动装箱的用途:

赋值和方法调用传递参数。
自动装箱最常使用的场景是集合,由于集合不能接收原始类型的数据,只接受包装对象。

List<Integer> integerList=new ArrayList<>();
integerList.add(1); //autoBox
integerList.add(2);
		
Iterator<Integer> it=integerList.iterator();
while(it.hasNext()){
		System.out.println(it.next());
}
输出结果:
1
2

3 第一个示例遗留的问题,为什么结果是true
根据我们目前了了解的

Integer var1=6;//自动装箱
Integer var2=6;//自动装箱

以上代码创建了对象。 == 在此的意义是判断引用是否相等。

Integer var1=Integer.valueOf(6);
Integer var2=Integer.valueOf(6);

valueof 源码

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

可以看出两个对象的引用是想等的,因为他们值相同。

目前我们已经明白了自动装箱的就是用来把原始数据类型变成包装对象。动作的执行者是编译器。

4.缺点
自动装箱可以使我们的代码变得简洁,但是没有缺点吗?辩证法来说事物具有两面性。

Integer count=0;
for(int i=0;i<1000;i++){
		count+=i; // 每次循环到这里,都会创建新的对象。
 }

如果出现上面的情况,每次循环到执行 count+=i; 会创建一个对象,这样就会浪费内存,会降低程序性能加重(GC)垃圾回收的工作量。

这种问题是自动装箱本身引入的问题,因为自动装箱就是把原始类型提升为对象。 我们要在编写代码的时候,尽量避免上面情况的出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值