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