Java装箱与拆箱

来源:互联网 发布:javascript matlab 编辑:程序博客网 时间:2024/05/16 00:37

基本类型:boolean,char,btye,short,int,long,float,double
基本类型包装类:Boolean,Character,Byte,Short,Integer,Long,Float,Double

装箱是指将基本数据类型封装为对象类型。

拆箱是指将对象类型转换成基本数据类型。

装箱和拆箱都是编译器自行完成的。

装箱的实质是调用Integer.valueof()方法。

/*装箱与拆箱的实例*/Integer num = 10;//装箱int i = num;//拆箱
int i=10;Long l=i;//用int类型来对Long进行装箱是不行的Long l=(long)i;//但是可以把int强制转成long在装箱Long l=10;//也不行,因为默认的整型是int类型

Integer i1=10;Integer i2=10;Integer i3=new Integer(10);Integer i4=new Integer(10);if(i1==i3)   System.out .println("true");else   System.out .println("false");if(i1==i2)   System.out .println("true");else  System.out .println("false");if(i3==i4)  System.out .println("true");else  System.out .println("false");



输出结果是:false

                  true

                  false

Integer是类,它的实例对象用"=="比较时,比较的是对象而不是对象的值。第一个和第三个的结果是false,很容易理解,为什么第二个的结果是true?

难道是因为i1和i2都是装箱得到的,而它们的值又相等。我们再来看一个例子吧!

Integer i1=128;Integer i2=128;if(i1==i2)   System.out .println("true");else   System.out .println("false");

输出结果是:false

为什么这次两个相同的值装箱给两个Integer,它们有不相等呢?

这是因为,在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象,而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象。

这个规则对Byte,Short,Long同样适用。

这个规则在对Charater适用时,范围变成了0到127,因为字符转换成int后不可能有负数。



            

0 0
原创粉丝点击