下面的程序
public class IntegerTest
{
public static void main(String[] args)
{
Integer a1 = 100;
Integer a2 = 100;
System.out.println(a1==a2);
Integer b1 = 200;
Integer b2 = 200;
System.out.println(b1==b2);
}
}
输出的结果为:
为什么会出现这样的结果?
查看Integer中的源码就知道原因。
上面是一个Integer类中的内部类,是处理Integer的缓存,cache的大小为256,static块中是对cache赋值从-128(包含)~127(包含),所以上面的例子可以得出100在范围以内不会产生新的对象,直接返回缓存中的对象,200不在范围内会产生新的对象,注意Integer的缓存数据是不会被垃圾回收。
从该类的注释看也可以知道
本文通过一个简单的 Java 程序展示了 Integer 对象在特定范围内如何复用缓存对象,以及超出此范围时如何创建新对象。揭示了 Integer 类内部缓存的工作原理,并解释了这种设计背后的原因。

1363

被折叠的 条评论
为什么被折叠?



