2014-08-30 72 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