【问题标题】:Numeric promotion and equality? [duplicate]数字提升和平等? [复制]
【发布时间】:2011-08-02 10:11:58
【问题描述】:

可能重复:
Wrapper class and == operator

我的朋友有一个谜题。就是这样:

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。

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

【问题讨论】:

    标签: java equality numeric autoboxing


    【解决方案1】:

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

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

    根据经验:对于对象,始终将它们与等号进行比较,仅将基本类型与 == 进行比较。

    【讨论】:

    • 谢谢。我记得这个案子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2015-10-09
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多