码:
public class Foo { public static void main(String[] args) { long i = 4294967296l; System.out.println(i + 65536 * 65536); System.out.println(i + 65536L * 65536); } }
输出:
4294967296 8589934592
它看起来像在第一个System.out.println
语句中,65536 * 65536
被评估为int
它包装的结果类型0
.
我想知道为什么在这个声明中,数字没有提升到long
.我认为i
这个陈述中长变量的存在足以促进65536
长期变化.
在加法之前计算乘法(运算符优先级),因此首先65536 * 65536
计算为int乘法(因为两个操作数都是int
文字),并且结果被提升为long以添加a long
和a int
.