享元模式,顾名思义,就是共享同一个对象。
举个简单的例子:
Integer i = 1;
Integer j = 1;
System.out.println(i==j); //true
Integer a = 200;
Integer b = 200;
System.out.println(a==b); //false
对于为啥会出现这种情况,可以查看Integer类中的valueOf方法,实际上Integer 类初始化了一个数组,这个数组包含-128到127的数,当变量小于127时,会直接返回数组中的对象,而不是创建这个对象,当大于127时,便会new 一个对象出来。
这也就解释了上面的输出情况。这里的设计思想也就是用到了享元模式的思想,将小范围但需大量使用的数字先初始化,直接返回需要的对象,这是典型的以时间换取空间的思想。