A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wudigod12 中级黑马   /  2015-7-30 17:15  /  243 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

装箱是指将基本数据类型封装为对象类型。
拆箱是指将对象类型转换成基本数据类型。
装箱和拆箱都是编译器自行完成的。
装箱的实质是调用Integer.valueof()方法。
  1. /*
  2. 装箱与拆箱的实例
  3. */
  4. Integer num = 10;//装箱
  5. int i = num;//拆箱
复制代码
  1. int i=10;
  2. Long l=i;//用int类型来对Long进行装箱是不行的
  3. Long l=(long)i;//但是可以把int强制转成long在装箱
  4. Long l=10;//也不行,因为默认的整型是int类型
复制代码
  1. Integer i1=10;
  2. Integer i2=10;
  3. Integer i3=new Integer(10);
  4. Integer i4=new Integer(10);
  5. if(i1==i3)
  6.           System.out .println("true");
  7. else
  8.           System.out .println("false");
  9. if(i1==i2)
  10.           System.out .println("true");
  11. else
  12.          System.out .println("false");
  13. if(i3==i4)
  14.          System.out .println("true");
  15. else
  16.          System.out .println("false");
复制代码

输出结果是:false

                  true
                  false
Integer是类,它的实例对象用"=="比较时,比较的是对象而不是对象的值。第一个和第三个的结果是false,很容易理解,为什么第二个的结果是true?
难道是因为i1和i2都是装箱得到的,而它们的值又相等。我们再来看一个例子吧!
  1. Integer i1=128;
  2. Integer i2=128;
  3. if(i1==i2)
  4.           System.out .println("true");
  5. else
  6.           System.out .println("false");
复制代码

输出结果是:false

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

这是因为,在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象,而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象。
这个规则对Byte,Short,Long同样适用。
这个规则在对Charater适用时,范围变成了0到127,因为字符转换成int后不可能有负数。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马