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