您的位置:首页 > 其它

自动装箱与拆箱------->引出享元模式

2014-05-23 12:53 155 查看
装箱:

       把基本类型 用它们相应的引用类型 包装起来,使其具有对象的性质。(基本类型
----》 对象)

          Integer i1 = 3;

拆箱:

        将引用类型的对象 简化成 值类型的数据。
                                 (对象 ----》 基本类型)

 
      System.out.println(i1 + 4);   //7

 
      此时   i1 是 Integer对象,4 是基本类型,相加时,则i1 自动拆箱成int类型  + 4 =7。

------------------------------------------------------------------------------------------------------------------------------

延伸:

class  Test
{
public static void main(String[] args)
{

String s1 = new String("abc");
String s2 = new String("abc");

Integer i2 = new Integer(10);
Integer i3 = new Integer(10);

Integer i4 = 10;
Integer i5 = 10;

Integer i6 = 137;
Integer i7 = 137;

System.out.println(s1==s2);    //1、false
System.out.println(i2==i3);    //2、false
System.out.println(i4==i5);    //3、true
System.out.println(i6==i7);    //4、false
}

}

</span>
对于这个例子,s1==s2 i2==i3 倒好理解,这4个对象都是new的对象,==比较的是引用地址,所以肯定是不相等的。

至于i4==i5
i6==i7 为什么结果不一致呢。

当小于1字节的int类型,-128~127

Integer i4 = 10; int类型的10 装箱成Integer对象,则会将10缓存在池中,

Integer i5 = 10; 当下次再次用到10装箱成Integer对象时,就会从池中获取10封装成相同的对象。

目的:节省了内存空间。因为像这种 小于1字节的数据,会经常用到,就会存在池中,如果每用到1个数据,就去开辟一个空间。将会极大浪费内存空间。没必要 每个数据对应一个对象。这就是一个设计模式:享元模式 flyweight。

很多对象都用的是相同的数据,没必要复制重复的数据,浪费空间。

比如:26英文字母,要是没输入一个字母,都生成一个字母对象,则浪费空间。所以只需要生成26个对象。

在windows中有很多文件夹图标,也是用的同一个图标。

(享元模式):有很多小的对象,具有很多相同的属性,把它们变成一个对象,称之为内部状态。,不同的(变化的)属性,变成方法的参数,称之为外部状态。test(int x,int
y) .x.y就是变化的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐