Java中的运算符优先级不符合Java规范

时间:2014-08-30 11:34:18

标签: java operator-keyword operator-precedence

     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

1 个答案:

答案 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

  

除了赋值运算符之外的所有二元运算符都是从左到右计算的;赋值运算符从右到左进行计算。

你不能只是略读表格。