我有一个方法通过调用 resp.getResultCode()
返回一个 Long 对象数据类型。我想将它与 HttpStatus.GONE.value()
进行比较,该方法实际上只返回一个原始 int 值 410
。这个 Long 对象会自动拆箱以便与 int 值进行正确的比较吗?
if(resp.getResultCode() == HttpStatus.GONE.value()){
// code inside..
}
我有一个方法通过调用 resp.getResultCode()
返回一个 Long 对象数据类型。我想将它与 HttpStatus.GONE.value()
进行比较,该方法实际上只返回一个原始 int 值 410
。这个 Long 对象会自动拆箱以便与 int 值进行正确的比较吗?
if(resp.getResultCode() == HttpStatus.GONE.value()){
// code inside..
}
这里是JLS解释。
如果相等运算符的操作数都是数字类型,或者一个是数字类型而另一个可以转换为数字类型(§5.1.8),则对操作数执行二进制数字升级(§5.6.2)。
并且
如果操作数的晋升类型是
int
或long
,则执行整数等式测试。
因此,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
}
int
将会被提升为long
值。 - Sotirios Delimanolis