使用==比较Long对象类型和原始int

时间:2014-11-05 15:49:25

标签: java autoboxing

我有一个通过调用:resp.getResultCode()返回Long对象数据类型的方法。我想比较它HttpStatus.GONE.value(),它实际上只返回{​​{1}}的原始int值。 Long unbox本身是否可以与int原语进行正确比较?

410

1 个答案:

答案 0 :(得分:9)

这是JLS explanation

  

如果等于运算符的操作数都是数字类型,或者一个是数字类型而另一个是convertible (§5.1.8)到数字类型,则对操作数执行二进制数字提升(第5.6.2节)。

  

如果操作数的提升类型为intlong,则执行整数相等性测试。

因此Long已取消装箱至long。数字促销适用于int,使其成为long。然后对它们进行比较。

考虑将long“降级”为int的情况,你会遇到这样的情况

public static void main(String[] args) throws Exception {
    long lvalue = 1234567891011L;
    int ivalue = 1912277059;
    System.out.println(lvalue == ivalue); // false
    System.out.println((int) lvalue == ivalue); // true, but shouldn't
}