为什么当表达式中有另一个长值时,我的整数文字没有被提升为long类型?

时间:2015-12-07 08:10:01

标签: java types

代码:

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延长。

2 个答案:

答案 0 :(得分:10)

在加法之前计算乘法(运算符优先级),因此第一个65536 * 65536被计算为int multiplication(因为两个操作数都是int个文字),并且结果被提升为long以添加{ {1}}和long

答案 1 :(得分:0)

乘法表达式的类型是其操作数的提升类型。 如果提升的类型是int或long,则执行整数运算。 和一元加表达式的类型是操作数的提升类型。

任何进一步的澄清请使用链接

https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.15.3