问题:
如果利用java5自动装配特性定义两个对象:
Integer i1 = 13;
Integer i2 = 13;
那么,这两个对象是不是同一个对象呢?
System.out.print(i1==i2);
结果是true,还是false?
如果这样定义:
Integer i1 = 137;
Integer i2 = 137;
结果又是什么?
答案:第一种定义的结果是true,而第二种的结果则是false。
原因是这样的,如果这个数字在一个字节之内,就是-128~127之间,java会认为这些对象占用资源少,使用的频率可能会很高,所以采用了享元设计模式进行处理。
结论:对于一个小的整数(1个字节内),装箱之后的对象是同一个。
享元设计模式:有很多个小的对象,它们之间有相同的属性,就把这些对象定为一个对象。它们之间相同的属性称为内部状态,而它们之间不相同的属性可以定义为方法的参数, 称之为外部状态。
思考:设计模式不一定很复杂,有时候也会很简单,但它仍然是一种经典的模式。