整数构造变体

2024-05-05

大家好,我遇到了一个有趣的事件,正在寻找解释。

在 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);

I get:

false
true

在 Eclipse 中我检查了调试器。a and b是不同的对象,而c and d是相同的对象(但不同于a and b).

谁能告诉我幕后发生的事情吗?这就是 JVM 的魔力吗?意识到 Integer(5) 已经在堆栈中了吗?


Java 缓存Integer如果它们是常量,则它认为足够接近于零的值的实例。手动创建一个Integer using new绕过该缓存。您可以致电Integer.valueOfint即可得到对应的Integer无需绕过缓存。

您可能需要在您选择的搜索引擎上搜索“JVM 整数缓存”以获取更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整数构造变体 的相关文章

随机推荐