如何在Java中进行原始的long和int比较

时间:2018-02-14 09:06:45

标签: java

long l = 123;
int i = 1234;
if(l == i){
  System.out.println("equal");
}
else{
System.out.println("not equal");
}

我的问题是他们比较为int还是long?

我认为两者都是int,除非我们指定long l = 123L。如果有人有更深入的了解,那么请解释一下。

2 个答案:

答案 0 :(得分:3)

由于==运算符的其中一个操作数为longl),因此在将long转换为i后,它会对两个long进行比较}。

相关JLS报价:

15.21.1. Numerical Equality Operators == and !=

  

如果等于运算符的操作数数字类型,或者一个是数字类型而另一个是可转换的(第5.1.8节)为数字类型,则二进制数字促销在操作数上执行(§5.6.2)。

     

如果提升的操作数类型是int或long,则执行整数相等性测试。

<强> 5.6.2. Binary Numeric Promotion

  

否则,如果任一操作数的类型为long,则另一个操作数转换为long

答案 1 :(得分:1)

必须为intlong,因为某些较大的long值无法在不丢失精度的情况下转换为int值。