2014-08-30 32 views
-2
 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=22Java中的运算符优先级不符合Java规范

+5

*根据java规范'e - '应该在'++ e' *“=>之前被评估吗?你有参考吗?表达式通常从左到右进行求值...... – assylias 2014-08-30 11:35:43

+0

Java中存在的所有问题中,这看起来像是一个很平凡的问题 – ControlAltDel 2014-08-30 11:42:07

+1

正如@assylias指出的那样,您的整个问题似乎都是基于错误的前提。 – 2014-08-30 11:43:46

回答

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); 

获得

我希望有帮助。

编辑

根据您的Java Tutorials link

所有二元运算除了赋值运算符从左至右计算;赋值运算符从右向左评估。

你不能只是略过表。

+0

,@ assylias,@ Oli Charlesworth点击这个[链接](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)你没有得到我的问题..根据Java规范运算符的优先顺序, postfix应该在前缀运算符前进行评估,所以相应的“e--”应该在“e ++”之前进行评估...... plz大家在评论之前看到链接.. – 2014-09-03 06:22:54

+0

@RanjitSran编辑来解决你的链接问题,Java教程不是[ JLS](http://docs.oracle.com/javase/specs/jls/se7/html/index.html)。 – 2014-09-03 11:11:08