黑马程序员技术交流社区

标题: 装箱与拆箱 [打印本页]

作者: Sakuratossi    时间: 2014-8-30 16:55
标题: 装箱与拆箱
装箱: 把基本的数据类型变成数据类型包装类, 用int类型举例,int类型的包装类对象是Integer
正常新建一个integer对象应该是这样,Integer i = new Integer(3);
用装箱的方法就是: Integer i = 3;
这里3就被自动装箱了。因为3属于基本数据类型的,它是不能直接赋值给一个对象Integer的,但是到了JDK1.5以后可以这样做。

拆箱:跟装箱相反。
Integer i = 3;
int j = i,  i是一个integer对象,按理说int类型j不能直接等于i,这是拆箱!


特别之处:
Integer obj = 3;
Integer obj1 = 3;
obj == obj1 ——— true;

Integer obj = 137;
Integer obj1 = 137;
obj == obj1 ——— false;

这是一个比较奇怪的现象,
java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象,而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;

老师说,如果对象很小具有相同的东西,可以被重用,就像电脑中的文件夹,一个目录下有很多文件夹,这些文件夹是比较小的对象,具有相同的属性,因此被封装成一个对象。
java对于Integer与int的这种自动装箱与拆箱的设计,就是一种模式,享元模式(FlyWeight)。对于小对象它用来尽减少开辟内存空间。




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