在 java 中自动装箱?

Autoboxing in java?

我发现当 xy 被自动装箱到 400 时,输出是 不一样 但是当 xy 被自动装箱到 40他们是 same.Why??

public class Demo1 {
    public static void main(String args[]) {
         Integer x = 400, y = 400;
         if (x == y)
            System.out.println("Same");
         else
            System.out.println("Not Same");
    }
}

作为一项优化,JVM 在启动时会缓存一些 Integer 引用(从 -128 到 +127 的引用)。

所以 Integer 等于 40 将引用该缓存中的一个。这就是为什么两个值为 40 的引用比较相等:它们都引用同一个缓存对象。

由于 400 在缓存范围之外,Integer 引用设置为 400 将不会引用缓存对象,因此具有该值的两个引用不会比较相等。

这是因为 Java 整数缓存。当一个数字在缓存中时,引用被初始化为缓存中的一个,而不是创建一个新对象。在您的情况下,40 在缓存内,因此对象引用相同,但 400 在缓存外,因此对象不相同 reference.See this answer.