享元模式

  享元模式的英文为Flyweight pattern .在说享元模式之前先看一段代码:

                Integer i1 = 1;
		Integer i2 = 1;
		System.out.println(i1 == i2); // true

 对于以上代码你可能会觉得奇怪,因为明明是比较的栈内存的地址是否相同,而两个只是对象的引用,为什么会出现这样的情况呢?别急再看下面代码:

                Integer i1 = 160;
		Integer i2 = 160;
		System.out.println(i1 == i2); // false

就会觉得非常奇怪,为什么都是Integer类型一个输入true,一个输出false呢?原因在这里就是jdk用到的享元模式。享元模式就是把一些常用的部分给单独提取出来,然后供大家用。

对于上面的结果出现的原因是:jdk把int类型的-128---127之间的数字缓存起来。如果有人定义了int类型并且值为-128----127之间,那么他们就共享内存中的一块单元。由于它们共享一块内存,所以指向的内存地址也就应该相同的。代码在内存中的图是i1和i2同时指向内存中的同一块区域。

======================================================

Integer i =1 //等价于 Integer i = new Integer(1) 

因为jdk会自动拆箱装箱。




你可能感兴趣的:(java,享元模式)