0

可能重复:
包装类和 == 运算符

我有一个来自朋友的谜题。就这个:

public class Test{
    public static void main(String[] args){
        Integer i = 1000; //10
        Integer y = 1000; //10      
        System.out.println(i == y);
    }
}

结果将是 FALSE。这是正确的。但是当将 i,y 值替换为 10 时,结果为 TRUE。

根据我的阅读,当运算符 == 应用于引用变量时,它将测试它们是否引用同一个对象。我不知道为什么会出现这样的结果,但我猜是数字提升的问题。我真的需要帮助。感谢每一个人。

4

1 回答 1

2

没有任何提升,因为作为数字文字的 10 和 1000 是 int 类型。

但是对于小的 Integer-Objects 有一个值池,类似于字符串池,因为大多数值都很小,或者更经常使用小值。但是为了限制池的大小,它只覆盖了 -128 到 127 之间的一些值。

根据经验:对于对象,总是将它们与等号进行比较,只有基本类型与 == 进行比较。

于 2011-08-02T10:26:55.327 回答