且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

jdk1.5新特性4之自动装箱和自动拆箱与享元模式

更新时间:2021-11-21 08:25:40

 

一 基本概念

1 装箱

把基本类型用它们相应的引用类型包装起来,使其具有对象的性质。如int——>Integer,float——>Float。

自动装箱

Integer a = 100,编译器调用的是static Integer valueOf(int i)

              

2 拆箱

和装箱相反,将引用类型的对象简化成值类型的数据

自动拆箱

int b = new Integer(100);
int c = a +2;

 


二 是否相等


例一
Integer a = new Integer(100);
Integer b = 100;
System.out.println(a == b);
false,很好理解,b的值在编译时就确定下来了,而a是分配一块堆给它,地址当然不等


例二
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b);
false,不解释


例三
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
true,java为了提高效率,IntegerCache类中有一个数组缓存了值从-128到127的Integer对象。如果i的值是[-128,127]时,会直接从这个缓存中返回一个对象,否则就new一个Integer对象。类比String的驻留池。
 


例四
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
false,解释见例3


例五
Integer a = Integer.valueOf(100);
Integer b = 100;
System.out.println(a == b);
true

 

例六
Integer a = Integer.valueOf(128);
Integer b = 128;
System.out.println(a == b);
false

 


三 享元模式

享元模式(Flyweight Pattern)是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。正如我们例三展示的。

 

参考博客
http://www.cnblogs.com/wangchenyang/archive/2012/02/01/2334760.html
http://baike.baidu.com/view/6143765.htm