享元模式
时间:2014-03-09 00:43:40
收藏:0
阅读:330
享元模式的英文为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会自动拆箱装箱。
原文:http://blog.csdn.net/zl544434558/article/details/20804901
评论(0)