为什么 == 对于某些整数对象为 true?

2022-09-02 11:26:20

可能的重复:
整数包装器对象仅在值 127 内共享相同的实例?

我从Khalid Mughal SCJP复制了以下程序片段,但我无法
理解输出。

 public class RQ200_60 {
    public static void main(String[] args) {
        Integer i = -10;
        Integer j = -10;
        System.out.print(i==j);         // output: true -- why true?
        System.out.print(i.equals(j));  // output: true
        Integer n = 128;
        Integer m = 128;
        System.out.print(n==m);         // output: false
        System.out.print(n.equals(m));  // output: true
    }
}      

上面的程序为第一个 print 语句提供 true 输出 true,但它应该给出 false,因为它是与 == 关系运算符的引用比较。但是第三版给出了错误,我不明白这种不一致。

非常感谢您的解释!


答案 1

在第一种情况下,对象 和 都指向同一缓存对象。默认情况下,介于 -128 和 127 之间的范围缓存为 Object。我们可以使用 JVM 参数来增加范围ijInteger


答案 2

关于缓存的答案是正确的。但是,如果您去...

Integer i = new Integer(10);
Integer j = new Integer(10);

...然后你避免缓存,结果将是你所期望的。