Java中自动装箱整数对象的比较

当我们给一个整数对象赋值时,这个值是 自动盒子 转换为整数对象。例如,语句“Integer x=10”创建了一个值为10的对象“x”。

null

下面是一些基于自动装箱整数对象比较的有趣输出问题。

预测以下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操作符显式地创建整数对象,我们会得到“不一样”的输出。请参阅下面的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

预测以下程序的输出。这个例子是由 比沙尔·杜比 .

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

说明: 这里将创建两个对象。第一个对象由于调用新操作符而被X指向,第二个对象由于自动装箱而被创建。

本文由 阿比拉蒂 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享