黑马程序员技术交流社区

标题: 求详解 自动装箱拆箱 [打印本页]

作者: 李大伟    时间: 2013-1-27 23:15
标题: 求详解 自动装箱拆箱
本帖最后由 李大伟 于 2013-1-28 13:03 编辑

求详解  装箱和拆箱 ,最好举两个比较实际的例子,非常感谢
作者: 黄锦成    时间: 2013-1-27 23:21
这个在张老师的高新技术那里有讲到,很详细
作者: 廖成    时间: 2013-1-27 23:27
本帖最后由 廖成 于 2013-1-27 23:28 编辑

java中的8种基本数据类型都有与之对应的封装类(封装类就是所谓的箱)。分别是:

byte short int long double float char bool
Byte Short Integer Long Double Float Character Boolean

装箱就是把基本数据类型封装到箱子里(封装成与之对应的封装类而成为一个实例),拆箱就是把一个实例从箱子里拿出来。

在JDK5.0之前
  1. Integer a = 1;
复制代码
如果这样写是错误的(类型转换错误)。然而现在JVM会自动做一些必要的操作,使得上面的不用new关键字实例化Integer对象而是直接赋上一个常数的操作合理。好比把一件东西装到一个箱子里(封装类的对象),这就是自动装箱。反之:
  1. Integer b = new Integer(1);
  2. int c = b;
复制代码
把一个Integer的对象b直接赋值给int变量c,JVM默认会取出b的值赋给c,就好像从箱子里拿出一件东西给了谁谁谁,这就是自动拆箱。

装箱操作默认调用的是Integer的静态方法valueOf,拆箱操作默认调用的是Integer的intValue方法。下面是jdk1.6.0_10文档中Integer类的源码:
  1. public static Integer valueOf(int i) {
  2. final int offset = 128;
  3. if (i >= -128 && i <= 127) { // must cache
  4. return IntegerCache.cache[i + offset];
  5. }
  6. return new Integer(i);
  7. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2