装箱拆箱与享元模式

装箱和拆箱:

装箱是将值类型转换为引用类型,反之,将引用类型转换为值类型称为拆箱。java JDK 1.5 提供了基本数据类型的自动装箱和拆箱 auto Boxing/unBoxing

public class AutoBox {
public static void main(String[] args)
{
 Integer iObject = 3;//Auto Boxing
 System.out.println(iObject + 12);// unboxing
 
 Integer a = 3;
 Integer b = 3;
 System.out.println(a==b);//true
 
 Integer a1 = 138;
 Integer b1 = 138;
 System.out.println(a1 == b1);//false
 }
}

享元模式 flyweight:蝇量级的选手;轻量级职业拳击手。享元模式是对象的模式,以共享的方式支持大量的细粒度对象。 当一些小的对象有很多相同属性时,我们把这些对象用一个对象来表示,相同的属性叫做内部状态;但是它们还是有一些差别的,这些差别作为外部参数传递进去,用对象中的方法来实现,这些不同点称为外部状态。

对于Integer,当整数大小在一个字节可以表示的范围之内时,会做一个自动缓存,这时候就用到了享元模式,两个integer变量实际上是一个对象,指向同一个内存地址。但是当整数大小大于一个字节的表示范围时,就不再采用这种方式。

java 中的String类型也是采用了享元模式,String 对象是final 类型,对象一旦创建就不可改变。java中的所有字符串常量都存放在常量池中,java会确保一个字符串常量在常量池中只有一个拷贝。

因此,以下代码中输出结果为 true

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);

关于更详细的例子参考 http://www.cnblogs.com/java-my-life/archive/2012/04/26/2468499.html

原文地址:https://www.cnblogs.com/Lillian-1304/p/boxing.html