import java.util.*;
class OperatorPrecedenceExp
{
public static void main(String[] args)
{
int e=10;
sum=++e+e--;//e-- should b evaluated first
System.out.println("sum="+sum);
}
}
以上代码打印sum=22
。但是根据Java规范e--
应该在++e
之前进行评估。因此,结果应sum=20
而不是sum=22
。
答案 0 :(得分:1)
如果您说 e--
应首先评估,
sum=++e+e--;//e-- should be evaluated first
你一定不对。首先,e--
不会将e
更改为下一个语句(即post-decrement中的帖子)。接下来,如果您将代码更改为,
int sum = ++e + --e;
System.out.printf("sum=%d%n", sum);
您将看到第一个e
预先递增,然后添加到e
的预递减(按此顺序),因为总和是
21
您的预期结果(20)可以通过
获得int e = 11;
int sum = --e + e++;
System.out.printf("sum=%d%n", sum);
或
int e = 9;
int sum = ++e + e--;
System.out.printf("sum=%d%n", sum);
我希望有所帮助。
修改强>
根据您的Java Tutorials link,
除了赋值运算符之外的所有二元运算符都是从左到右计算的;赋值运算符从右到左进行计算。
你不能只是略读表格。