大家好,我遇到了一个有趣的事件,正在寻找解释。
在 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.valueOf
与int
即可得到对应的Integer
无需绕过缓存。
您可能需要在您选择的搜索引擎上搜索“JVM 整数缓存”以获取更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)