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

📅  最后修改于: 2020-03-24 06:19:11             🧑  作者: Mango

当我们将整数值分配给Integer对象时,该值会自动装箱到Integer对象中。例如,语句“ Integer x = 10″创建了一个值为10的对象“ x”。
以下是一些基于自动装箱整数对象的有趣输出问题。
预测以下Java程序的输出

// 文件名: Main.java
public class Main {
    public static void main(String args[]) {
         Integer x = 400, y = 400;
         if (x == y)
            System.out.println("一样");
         else
            System.out.println("不一样");
    }
}

输出:

不一样

由于x和y指向不同的对象,因此我们得到的输出为“不相同”
以下程序的输出令Java感到惊讶。

// 文件名: Main.java
public class Main {
    public static void main(String args[]) {
         Integer x = 40, y = 40;
         if (x == y)
            System.out.println("一样");
         else
            System.out.println("不一样");
    }
}

输出:

一样

在Java中,将从-128到127的值缓存,因此返回相同的对象。如果值在-128到127之间,则valueOf()的实现将使用缓存的对象。
如果使用new运算符显式创建Integer对象,则输出为“不相同”。请参阅以下Java程序。在以下程序中,未使用valueOf()。

// 文件名: 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("一样");
         else
            System.out.println("不一样");
    }
}

输出:

不一样

预测以下程序的输出。

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