Java中Autoboxed Integer对象的比较
当我们将整数值分配给 Integer 对象时,该值会自动装箱到 Integer 对象中。例如,语句“Integer x = 10”创建了一个值为 10 的对象“x”。
以下是一些基于 Autoboxed Integer 对象比较的有趣输出问题。
预测以下Java程序的输出
// file name: Main.java
public class Main {
public static void main(String args[]) {
Integer x = 400, y = 400;
if (x == y)
System.out.println("Same");
else
System.out.println("Not Same");
}
}
输出:
Not Same
由于 x 和 y 指的是不同的对象,我们得到的输出为“Not Same”
以下程序的输出是Java的一个惊喜。
// file name: Main.java
public class Main {
public static void main(String args[]) {
Integer x = 40, y = 40;
if (x == y)
System.out.println("Same");
else
System.out.println("Not Same");
}
}
输出:
Same
在Java中,从 -128 到 127 的值被缓存,因此返回相同的对象。如果值在 -128 到 127 之间,则 valueOf() 的实现使用缓存对象。
如果我们使用 new 运算符显式创建 Integer 对象,我们会得到“Not Same”的输出。请参阅以下Java程序。在以下程序中,不使用 valueOf()。
// file name: Main.java
public class Main {
public static void main(String args[]) {
Integer x = new Integer(40), y = new Integer(40);
if (x == y)
System.out.println("Same");
else
System.out.println("Not Same");
}
}
输出:
Not Same
预测以下程序的输出。此示例由Bishal Dubey提供。
class GFG
{
public static void main(String[] args)
{
Integer X = new Integer(10);
Integer Y = 10;
// Due to auto-boxing, a new Wrapper object
// is created which is pointed by Y
System.out.println(X == Y);
}
}
输出:
false
说明:这里将创建两个对象。由于调用 new运算符而由 X 指向的第一个对象和由于自动装箱而创建的第二个对象。