考虑以下代码:
System.out.println(1 + 0xFFFFFFFFL);
System.out.println(1L + 0xFFFFFFFF);
第一行打印期望值,4294967296
。但第二行打印一个0
. 我检查了两个表达式的类型(通过将它们传递给方法)并且都被long
JVM 识别。Lava 7 语言规范规定,对于二进制操作,“如果任一操作数的类型为 long,则另一个操作数将转换为 long。” 似乎这就是正在发生的事情,但我有两个问题:
如果两个操作数最终都是长整数,为什么第一个表达式中的高位被截断?
为什么顺序很重要?