”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么 Java 的整数常量池在 127 以上表现不同?

为什么 Java 的整数常量池在 127 以上表现不同?

发布于2024-12-22
浏览:284

Why Does Java's Integer Constant Pool Behave Differently Above 127?

问题:127处Java整数常量池行为的分歧

简介:

The整数常量池是Java中的一种机制,可以优化常见整数值的缓存以提高性能。然而,该池的行为在 127 时出现了变化,引起了开发人员的困惑。

理解行为:

对于从 -128 到 127 的整数,Java 保证引用相同常量的变量具有相同的引用。

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2); // True

这是因为这些值被缓存在常量池中。

分歧在128处:

但是当整数值超过127、行为改变。

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1 == i2); // False

这是由于实现优化所致。虽然 JLS 保证缓存最多 127 个值,但超出该范围,实现可能会选择以不同方式缓存值,甚至根本不缓存值。

其他注意事项:

甚至在保证范围(-128 到 127)内,缓存行为并不总是可靠。例如,使用 new Integer() 可以绕过常量池并创建新的引用。

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); // False

结论:

整数常量池在 127 处的行为源于实现优化和 JLS 定义的保证范围。开发人员应该意识到这种行为变化,以避免意外结果。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3