大家好,我遇到了一件有趣的事情,正在寻找解释。
在 Java 1.6 中:
Integer a = new Integer(5);
Integer b = new Integer(5);
System.out.println(a == b);
Integer c = 5;
Integer d = 5;
System.out.println(c == d);
我得到:
false
true
在 Eclipse 中,我检查了调试器。 a
和 b
是不同的对象,而 c
和 d
是相同的对象(但不同于 a
和 b
)。
谁能告诉我幕后发生的事情?这是 JVM 魔法吗?意识到 Integer(5) 已经在堆栈上了吗?
最佳答案
Java 缓存 Integer
实例以获得它认为足够接近零的值(如果它们是常量)。使用 new
手动创建 Integer
会绕过该缓存。您可以使用 int
调用 Integer.valueOf
来获取相应的 Integer
而无需绕过缓存。
您可能想在您选择的搜索引擎上搜索“JVM 整数缓存”以获取更多信息。
关于java - 整数构造变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865056/