Java 自动框定的Integer对象的比较

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所指向,第二个对象将由于自动装箱而被创建。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程