2014-03-29 48 views
1

這不是我的代碼,我知道這不是寫這個的正確方法。我在網上測試中被問到這一點。這個Java程序的輸出

public class HelloWorld{ 

    public static void main(String []args){ 
     int x = 10; 
     x = x++ * ++x; 
     System.out.println(x); 
    } 
} 

Ouptut是120.我不明白爲什麼。它不應該是132/121?它依賴於JVM嗎?

+0

認爲AB出來後和++ – innoSPG

+3

@預申請ᴋᴇʏsᴇʀ他的意思'132' ** **或'121' – Baby

+0

僅供參考,Java定義的計算順序,所以,這是不依賴於JVM。但不要嘗試這種C或C++,其結果可能依賴於編譯器。 (不確定關於JavaScript,PHP,C#。) – ajb

回答

4

x++首先被評估。它是後增量,所以10是表達式的值,然後x增加到11

++x接下來進行評估。它是預先增量的,所以x增加到12,12是表達式的值。

其餘的是簡單的乘法和10×12 = 120。

此行爲不依賴於哪個JVM被使用;所有的JVM都必須按照Java語言規範的規定進行操作。

JLS, Section 15.14.2覆蓋增量後的表達式:

後綴增量表達式的值是新的值存儲在變量前的值。

JLS, Section 15.15.1的覆蓋預先遞增表達式:

前綴增量表達式的值是新的值存儲在變量後的值。

0

它是完美的,X ++將使10由於post increment在執行時,將成爲後11 ++ x將使其在12例因preincrement。所以輸出將是120