java - 整数构造变体

标签 java integer

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

在 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 中,我检查了调试器。 ab 是不同的对象,而 cd 是相同的对象(但不同于 ab)。

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

最佳答案

Java 缓存 Integer 实例以获得它认为足够接近零的值(如果它们是常量)。使用 new 手动创建 Integer 会绕过该缓存。您可以使用 int 调用 Integer.valueOf 来获取相应的 Integer 而无需绕过缓存。

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

关于java - 整数构造变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865056/

相关文章:

Vb.net 将整数 DBNULL 转换为 0 - 错误

java - 验证字段时如何避免重复检查空值?

java - 异常后继续执行

javax.validation.Validation 多重实例化与重用单个 Validator 实例

javascript - JavaScript 是否支持 64 位整数?

string - 将数字作为字符串插入到文本列中,SQLite 仍然删除前导零

C# 从整数列表中删除项目 int[] l = {1,2,3} - 或使用递归添加它们

Java Android 应用程序 - 德州扑克的简单 AI

java - "Polymorphism applies to overriding, not to overloading"?

Swift:检查 NSArray 中的哪个值最接近另一个给定值