码:
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
提升为long。 最佳答案
乘法在加法之前求值(运算符优先级),因此首先将65536 * 65536
评估为int乘法(因为两个操作数都是int
文字),并且将结果提升为很长的时间,以便添加long
和int
。