Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
Integer类内部有一个缓存,其实就是一个Integer[],大小为256,它存储了-128 ~ 127之间的所有Integer对象。
当使用valueOf(100)方法时,该方法判断100在-128~127之间,说明缓存中存在这个Integer,所以它会直接把缓存中的Integer返回。
也就是说,valueOf(100)两次,获取的都是缓存中的Integer!
如果valueOf(200),因为200超出了-128~127范围,valueOf()方法会创建Integer对象返回。即return new Integer(200);
所以valueOf(200)一次,创建一个Integer,valueOf(200)两次,那么两个Integer对象。
i1和i2是缓存中Integer对象的两个引用,也就是说i1和i2引用的是同一对象;
i3和i4是不同的对象,它会范围超出了缓存大小。