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。如果有人有更深入的了解,那么请解释一下。
答案 0 :(得分:3)
由于==
运算符的其中一个操作数为long
(l
),因此在将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)
必须为int
到long
,因为某些较大的long值无法在不丢失精度的情况下转换为int值。