int x = 3;
System.out.println(x++ + ++x + x++); // 13
爲什麼結果13?在複雜語句中如何增加Java運算符的行爲
我的邏輯:
++x
在中心給出44 + 4 + 4 = 12
所以其結果必然是12
int x = 3;
System.out.println(x++ + ++x + x++); // 13
爲什麼結果13?在複雜語句中如何增加Java運算符的行爲
我的邏輯:
++x
在中心給出44 + 4 + 4 = 12
所以其結果必然是12讓我們把它一步一步。首先重要的是要注意表達式從左到右進行評估,所以沒有未定義的行爲。
int x = 3;
int res = x++ + ++x + x++
// res = (x++) + (++x) + (x++) with x = 3
// res = 3 + (++x) + (x++) with x = 4
// res = 3 + 5 + (x++) with x = 5
// res = 3 + 5 + 5 with x = 6
// res = 13
這裏的關鍵部分是:
x++
返回以前x
價值和增值x
之後。 JLS section 15.14.2關於「後綴遞增運算符++
」說:
後綴增量表達式的值是新的值存儲在變量的前值。
++x
返回下一個x
遞增值。 JLS section 15.15.1有關「前綴遞增運算符++
」說:
前綴增量表達式的值是新的值存儲在變量的後的值。
非常感謝你!你已經完全解釋了! –
System.out.println(x++ + ++x + x++); // 13
3 5 5
System.out.println(x++ + ++x + x++); // 13
x++
- 執行然後遞增,so 3
++x
- above 3 incremented to 4
,++ X增量第一然後執行,所以4+1=5
x++
- EXE cutes第一增量以後,so x=5
被使用,but after this execution x becomes 6
非常感謝!你已經解釋得很好! –
x++
是增量之前評估的值的表達式。當你看到x++
你可以把它看成
int result = x;
x = x + 1;
// do something with result.
++x
可以被認爲是
x = x + 1;
int result = x;
// do something with result.
由左到右的問題表達進行評估的。你可以把它想象成
int x = 3
int result1 = x; // 3
x = x + 1;
x = x + 1;
int result2 = x; // 5
int result3 = x; // 5
x = x + 1;
System.out.println(result1 + result2 + result3);
謝謝!你已經嘗試了很多! –
讓我們永遠不要寫這樣的代碼。沒有人應該在生產代碼中使用這樣的結構。 – duffymo
這是很有趣的分析在Java中,因爲它是明確的。請注意,在C和C++中,行爲是未定義的。 – Bathsheba
x ++確實發佈增量。所以在評估中,值是13 –