Java 中自动装箱 Integer 对象的比较

2024 年 9 月 10 日 | 阅读 3 分钟

自动装箱是Java的一项功能,它允许您自动将原始类型转换为相应的包装类对象。例如,语句Integer x = 10; 将自动创建一个值为10的Integer对象并将其分配给变量x。

以下是关于自动装箱Integer对象比较的一些有趣的输出问题。

文件名: AutoboxedExample1.java

输出

Not Same

解释:由于自动装箱,编译器会自动将这些原始值转换为Integer对象。A和B引用两个不同的Integer对象,即使它们具有相同的值。

程序中的if语句比较了两个对象的引用。由于引用不同,if语句将返回false,并且将打印“Not Same”消息。

文件名: AutoboxedExample2.java

输出

Same

解释:AutoboxedExample2类中的a和b变量都将引用同一个Integer对象,因为值42在-128到127的范围内,并且IntegerCache将从缓存中返回相应的对象。这就是为什么if语句将返回true,并且将打印“Same”消息。

文件名: AutoboxedExample3.java

输出

Not Same

解释:A和b引用两个不同的对象,即使它们具有相同的值。程序中的if语句比较了两个对象的引用。由于引用不同,if语句将返回false,并且将打印“Not Same”消息。

这是因为Java中的==运算符比较的是两个对象的引用,而不是它们的值。要比较两个自动装箱的Integer对象的值,您应该使用compareTo()方法。如果两个对象的值相同,compareTo()方法将返回0;如果第一个对象小于第二个对象,则返回-1;如果第一个对象大于第二个对象,则返回1。

文件名: AutoboxedExample4.java

输出

false

解释:该对象是使用new运算符创建的,它引用了一个新创建的Integer对象。b对象是通过自动装箱值5创建的,这意味着它引用了Integer类缓存的同一个Integer对象。


下一个主题Java中的计数令牌