整数caching在Java中

可能重复:
奇怪的Java拳击

最近我看到一个演示,下面是Java代码示例:

Integer a = 1000, b = 1000; System.out.println(a == b); // false Integer c = 100, d = 100; System.out.println(c == d); // true 

现在我有点困惑。 我明白为什么在第一种情况下结果是“假” – 这是因为整数是一个引用types,“a”和“b”的引用是不同的。

但为什么在第二种情况下结果是“真实的”?

我听到一个意见,JVMcaching对象的int值从-128到127为了一些优化的目的。 这样,“c”和“d”的引用是相同的。

有人可以给我更多关于这种行为的信息吗? 我想了解这个优化的目的。 在什么情况下,性能提高等等。参考这个问题的一些研究将是很大的。

我想了解这个优化的目的。 在什么情况下,性能提高等等。参考这个问题的一些研究将是很大的。

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

基本上, Integer类将Integer实例的caching保存在-128到127的范围内, Integer.valueOf()所有自动装箱,文字和使用将从其caching的范围中返回该caching的实例。

这是基于这样一个假设,即这些小值比其他整数更频繁出现,因此避免每个实例具有不同对象的开销( Integer对象占用12个字节)是有意义的。

看看Integer.valueOf(int) 。 它将返回相同的Integer对象,inputless于256

编辑:

这实际上是-128+127默认如下所述。