近,我看到一个演示,其中包含以下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()都会从该缓存返回其覆盖范围内的实例。
Integer
Integer.valueOf()
这是基于以下假设:这些较小的值比其他int出现的频率更高,因此避免每个实例拥有不同对象(Integer对象占用约12个字节)的开销是有意义的。