Java装箱与拆箱

基本类型: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后不可能有负数。



            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值