Possible Duplicate:
Weird Java Boxing
最近我看到一个演示文稿,其中有以下 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”的引用是不同的。
但是为什么在第二种情况下结果是“真”?
我听说过一个意见,即 JVM 缓存对象的 int 值从 -128 到 127 用于某些优化目的。这样,“c”和“d”的引用是一样的。
谁能给我更多关于这种行为的信息?我想了解这种优化的目的。在什么情况下性能会提高等等。引用这个问题的一些研究会很好。
最佳答案
I want to understand purposes of this optimization. In what cases performance is increased, etc. Reference to some research of this problem will be great.
目的主要是为了节省内存,也因为缓存效率更高而导致代码更快。
基本上,Integer
类保存 Integer
实例的缓存,范围为 -128 到 127,以及 Integer 的所有自动装箱、文字和使用。 valueOf()
将从该缓存中返回其覆盖范围内的实例。
这是基于这样的假设,即这些小值比其他整数更频繁地出现,因此避免为每个实例使用不同对象的开销是有意义的(Integer
对象占用了一些东西像 12 个字节)。
关于java - Java中的整数缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3131136/