這不是我的代碼,我知道這不是寫這個的正確方法。我在網上測試中被問到這一點。這個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嗎?
這不是我的代碼,我知道這不是寫這個的正確方法。我在網上測試中被問到這一點。這個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嗎?
x++
首先被評估。它是後增量,所以10
是表達式的值,然後x
增加到11
。
++x
接下來進行評估。它是預先增量的,所以x
增加到12
,12
是表達式的值。
其餘的是簡單的乘法和10×12 = 120。
此行爲不依賴於哪個JVM被使用;所有的JVM都必須按照Java語言規範的規定進行操作。
的JLS, Section 15.14.2覆蓋增量後的表達式:
後綴增量表達式的值是新的值存儲在變量的前的值。
JLS, Section 15.15.1的覆蓋預先遞增表達式:
前綴增量表達式的值是新的值存儲在變量的後的值。
這是一個常見的錯誤,涉及i++
和++i
的含義。
它是完美的,X ++將使10由於post increment
在執行時,將成爲後11 ++ x將使其在12例因preincrement
。所以輸出將是120
認爲AB出來後和++ – innoSPG
@預申請ᴋᴇʏsᴇʀ他的意思'132' ** **或'121' – Baby
僅供參考,Java定義的計算順序,所以,這是不依賴於JVM。但不要嘗試這種C或C++,其結果可能依賴於編譯器。 (不確定關於JavaScript,PHP,C#。) – ajb