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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄坚声 中级黑马   /  2012-5-11 17:13  /  4206 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java中自动装箱和拆箱是什么意思?

9 个回复

倒序浏览
本帖最后由 赵玮_Tom 于 2012-5-11 17:33 编辑

自动装箱和拆箱是jdk1.5的新特性之一。
我们知道,java中有8中基本数据类型,这8中基本数据类型不同于引用数据类型,是不能作为对象使用的。然而,经常需要把这些基本数据类型当做对象来使用(如:集合中存储的元素数据类型要求必须是引用数据类型,不能存储int类型数据),就出现了装箱操作,简言之,就是把一种基本数据类型转为与其对应的引用数据类型(如:int转为Integer)。
另一方面,相对于引用数据类型,基本数据类型有方便运算的优势(Integer类型是不能实现“加减”等操作的)。所以,又出现了将某些引用数据类型转为对应基本数据类型的需求,即拆箱。
jdk1.5之前,装箱和拆箱动作都是由程序员写代码完成的,频繁装箱和拆箱十分复杂、繁琐。jdk1.5之后,这种装箱和拆箱动作由程序自主完成,省去了程序员的麻烦,即自动拆箱和装箱。这样我们可以实现下述代码:
ArrayList al = new ArrayList();
al.add(5);//自动装箱

Integer i1 = 6;//自动装箱
Integer i2 = 7;//自动装箱
int num = i1+i2;//自动拆箱

而像这些自动转换动作,在jdk1.5之前是无法自动实现的。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Integer x=1;这个1是个对象;
int y=2;这个1是基本数据类型;
如果没有自动装箱和拆箱x+y就会报错,这就叫拆箱,
底层的实现是,把x那个对象自动的拆箱变成基本数据类型,然后相加。
自动装箱就是和这个向反,把基本数据变成对象。
对象是基于基本数据而来的,对基本数据的功能加强。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
顶楼上。
回复 使用道具 举报
自动装箱和拆箱一般是针对基本数据而言的,这是在j2se1.5版本出现以后提供的功能,java的8种基本数据类型都有其对应的包装类:int-Integer,short-Short,byte-Byte,long -Long,char -Character,double-Double,float-Float,boolean-Boolean。自动装箱是把基本的数据类型包装为其对应包装类的对象,自动拆箱则反之。例如集合al执行add(90);就会把90封闭成Integer的对象存储在集合中。再如以下代码
Integer i = 20;  //自动装箱
int m = i;          //自动拆箱
回复 使用道具 举报
楼上说的都不错,自动装箱与拆箱都是jdk1.5以后的新特性,我们知道新特性的出现无非是三点原因:
提高安全性,简化代码的书写,提高效率,对于自动装箱与拆箱当然就是为了简化书写了,如下面的代码语句
Integer x = new Integer(4);来new一个对象,我们同样可以写成Integer x = 4;当读到这条语句的时候他会自动为我们将左边的4“装箱”后赋给右边,这明显简化了代码的书写。
再比如下面两条语句:
Integer x = 4;//有自动装箱操作,就不多说了
x =x+2;
看第二条语句,我们知道x是一个对象,而2是一个整数,这里怎么就能进行相加操作呢?原因就是因为对左边的x进行了自动的拆箱操作,其原理是调用了Integer类中的intValue()方法,自动拆箱后就将int型的4与2相加后再自动装箱赋给右边的x(因为右边的x是对象)。
在这里还应注意一个情况,那就是x是对象了,它自然而然就多了一个值null(默认值)。
回复 使用道具 举报
李啸 中级黑马 2012-5-11 18:40:07
7#
所谓装箱就是把基本数据类型赋给一个引用数据类型
拆箱就是倒着来 把一个引用数据类型赋给一个基本数据类型
回复 使用道具 举报
杨静 中级黑马 2012-5-11 18:45:09
8#
自动装箱就是将基本数据类型自动转换成其对应的类,因为有的时候是需要将基本数据类型当做对象处理的,需要进行转化,而与此相似,有时候又需将其拆装成基本的数据类型,当有了自动的操作,会省去强制类型的操作。对于写程序来说简单了。
回复 使用道具 举报
都答的挺好的啊!!
回复 使用道具 举报
装箱就是把基础类型封装成一个类。比如把int封装成Integer,这时你就不能把他当成一个数了,而是一个类了,对他的操作就需要用它的方法了。
拆箱就是把类转换成基础类型。比如你算个加法什么的是不能用类的,就得把它转换成基本类型,jdk5以后已经可以自动转换了貌似。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马