码:

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文字),并且将结果提升为很长的时间,以便添加longint

10-06 14:09