Java中的整数缓存

近,我看到一个演示,其中包含以下Java代码示例:

Integer a = 1000, b = 1000;  

System.out.println(a == b); // false

Integer c = 100, d = 100;

System.out.println(c == d); // true

现在我有些困惑。我知道为什么在第一种情况下结果为“假”-这是因为整数是引用类型,而“ a”和“ b”的引用是不同的。

但是,为什么在第二种情况下结果为“ true”?

我听到一种意见,出于某些优化目的,JVM将对象的int值从-128缓存到127。这样,“ c”和“ d”的引用是相同的。

有人可以给我更多有关此行为的信息吗?我想了解此优化的目的。在什么情况下性能会提高,等等。对该问题的一些研究参考会很棒。

回答:

我想了解此优化的目的。在什么情况下性能会提高,等等。对该问题的一些研究参考会很棒。

目的主要是为了节省内存,由于具有更高的缓存效率,这也导致了更快的代码。

基本上,Integer该类会Integer在-128到127的范围内保留实例的缓存,并且所有自动装箱,文字和的使用Integer.valueOf()都会从该缓存返回其覆盖范围内的实例。

这是基于以下假设:这些较小的值比其他int出现的频率更高,因此避免每个实例拥有不同对象(Integer对象占用约12个字节)的开销是有意义的。

以上是 Java中的整数缓存 的全部内容, 来源链接: utcz.com/qa/412241.html

回到顶部