Java 自动框定的Integer对象的比较
当我们将一个整数值分配给一个Integer对象时,该值会被自动分解成一个Integer对象。例如,语句 “Integer x = 10 “创建了一个值为10的对象 “x”。
以下是一些基于自动框选整数对象比较的有趣输出问题。
预测以下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指的是不同的对象,我们得到的输出是 “不一样”
以下程序的输出是一个来自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对象,我们得到的输出是 “不一样”。请看下面的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所指向,第二个对象将由于自动装箱而被创建。