有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

  1. # 1 楼答案

    当你说,e 应该首先评估

    sum=++e+e ;//e  should be evaluated first
    

    你一定是错了。首先e 直到下一个语句(即post-decrement中的post)才改变e。接下来,如果您将代码更改为

    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

    All binary operators except for the assignment operators are evaluated from left to right; assignment operators are evaluated right to left.

    你不能只是浏览一下桌子