demo
如下,代码:
Integer i1=56;
Integer i2=56;
Integer i3=129;
Integer i4=129;
System.out.println(i1==i2);
System.out.println(i3==i4);
第一个返回true,第二个返回false
当用valueOf来创建Integer对象的时候,因为Integer用到了享元模式来复用对象,才导致了这样的运行结果。当我们通过自动装箱,也就是调用了valueOf来创建Integer对象的时候,如果要创建Integer对象的值在-128到127之间,会从IntegerCache类中直接返回,否则才调用new方法创建
在IntegerCache的代码实现中,当这个类被加载的时候,缓存的享元对象会被集中一次性创建好所有的整型值,这样即占用太多内存,也使得加载IntegerCache类的时间过长。所有,我们只能选择缓存对于大部分应用来说最常用的整型值,也就是一个字节的大小(-128到127之间的数据)