什么是装箱?什么是拆箱?

1、什么是装箱?什么是拆箱?

装箱:基本类型转变为包装器类型的过程。
拆箱:包装器类型转变为基本类型的过程。

//之前是不支持自动装箱和自动拆箱的,定义Integer对象,必须Integeri=newInteger(8);//开始,提供了自动装箱的功能,定义Integer对象可以这样Integeri=8;intn=i;//自动拆箱

2、装箱和拆箱的执行过程?

装箱是通过调用包装器类的valueOf方法实现的

拆箱是通过调用包装器类的xxxValue方法实现的,xxx代表对应的基本数据类型。

如int装箱的时候自动调用Integer的valueOf(int)方法;Integer拆箱的时候自动调用Integer的intValue方法。

3、常见问题?

整型的包装类valueOf方法返回对象时,在常用的取值范围内,会返回缓存对象。

浮点型的包装类valueOf方法返回新的对象。

布尔型的包装类valueOf方法Boolean类的静态常量TRUE|FALSE。

实验代码

Integeri1=100;Integeri2=100;Integeri3=200;Integeri4=200;(i1==i2);//(i3==i4);//falseDoubled1=100.0;Doubled2=100.0;Doubled3=200.0;Doubled4=200.0;(d1==d2);//(d3==d4);//falseBooleanb1=false;Booleanb2=false;Booleanb3=true;Booleanb4=true;(b1==b2);//(b3==b4);//true

包含算术运算会触发自动拆箱。

存在大量自动装箱的过程,如果装箱返回的包装对象不是从缓存中获取,会创建很多新的对象,比较消耗内存。

Integers1=0;longt1=();for(inti=0;i1000*10000;i++){s1+=i;}longt2=();("使用Integer,递增相加耗时:"+(t2-t1));//使用Integer,递增相加耗时:68ints2=0;longt3=();for(inti=0;i1000*10000;i++){s2+=i;}longt4=();("使用int,递增相加耗时:"+(t4-t3));//使用int,递增相加耗时:6

免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系