搜索
首页Javajava教程为什么 Java 的自动装箱在比较整数对象时会产生不一致的结果?

Why Does Java's Autoboxing Produce Inconsistent Results When Comparing Integer Objects?

Java 中的自动装箱不规则性:调查神秘的比较

Java 的自动装箱功能会自动将原始值转换为其相应的包装类对象。然而,当比较两个这样的对象时,会出现一种奇怪的行为。

考虑以下代码片段:

public class Scratch {
    public static void main(String[] args) {
        Integer a = 1000, b = 1000;
        System.out.println(a == b); // false

        Integer c = 100, d = 100;
        System.out.println(c == d); // true
    }
}

输出让我们困惑:第一个比较产生 false,而第二个比较返回 true。为什么会这样?

揭开谜底

第二行输出是由Java语言规范(JLS)保证的。第 5.1.7 节规定,特定范围内的原始值(包括 -128 到 127 之间的整数)始终装箱到相同的对象中。

If the value p being boxed is ... an int or short number between -128 and 127, then ... r1 == r2.

这确保常用值始终装箱为不可区分的对象。

开头的歧义比较

相比之下,JLS 没有明确保证第一个比较。虽然规范允许实现在一定范围内缓存对象,但它并不强制执行。

因此,将较大整数作为对象进行比较的行为是特定于实现的。在这种情况下,运行时环境似乎为“a”和“b”分配了不同的引用,导致打印“false”。

结论

Java 的自动装箱提供了便利,但在比较某些原始值时也有一些怪癖。虽然定义范围内的值保证共享身份,但较大的整数可能会根据实现选择而表现不同。这些知识可以帮助我们避免意外行为并保持对 Java 中对象比较的控制。

以上是为什么 Java 的自动装箱在比较整数对象时会产生不一致的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器