享元模式——flyweight
是一种设计模式。
其最重要的目的就是为了节省内存空间。将一些相对较小、较常用的数据类型都存在同一个内存空间。每次调用都是这个地址。
例如:
Integer s1= 13;
Integer s2= 13;
上面两个对象s1,s2,引用的是一个数据,都指向装有数字13的内存地址空间。由于java设计者考虑到一些类型的数据是经常使用的,为了节省内存开销,所以他们设置了一个规则,符合这个规则的数据都是存在一个内存里的。例如Integer 类型的 -127—128之间的整数,重复出现的都会只存在一个地址下。超过这个范围的则重新开辟内存空间。如下
Integer s1= 230;
Integer s2= 230;
此时,s1与s2是分别两个引用数据,在内存中分别指向两块地址空间。
注意:这个是Integer是int的封装类,只有Integer才会有上面的范围内使用同一个内存的概念。而int类型,则不然,所有int类型的数字,地址空间都是一个。
例如:int s1=88888;int s2=88888; 此时S1,S2没有想Integer中范围的约束,他们始终都是指向一个地址空间。
特殊说明:
自动装箱:Integer a=3; 这个是自动装箱的概念,是JDK1.5新特性。原本3是int类型的,是Integer的基本类型。需要转换才能变成Integer。现在不用了,可以直接赋值。
自动拆箱:a+3,a是integer类型,以前需要转换成int型才可以与3相加。现在也可以直接相加了。