我必須理解一些混合函數前后增量的代碼。有一件事讓我很困惑。所以我嘗試測試一些較小的功能。但我無法解釋以下行為:int i = 1;i = i++ * ++i * 2;System.out.println("i = " + i);int x = 1;x = ++x * x++ * 2;System.out.println("x = " + x);預期的輸出是: i = 8 x = 8但實際上是: i = 6 x = 8有人能告訴我為什么嗎?
2 回答

動漫人物
TA貢獻1815條經驗 獲得超10個贊
i++ * ++i * 2
-->?1?* 3 * 2 --> 6++x * x++ * 2
--> 2 *?2?* 2 --> 8
重要值以粗體顯示。
Java 中返回值時前綴和后綴遞增的區別可以由 Oracle 自己更好地總結(為了突出顯示,我再次加粗):
可以在操作數之前(前綴)或之后(后綴)應用遞增/遞減運算符。代碼結果++;和++結果;兩者都將以結果遞增 1 結束。唯一的區別是前綴版本 (++result) 評估為增量值,而后綴版本 (result++) 評估為原始值。如果您只是執行簡單的遞增/遞減,那么選擇哪個版本并不重要。但是,如果您在較大表達式的一部分中使用此運算符,則您選擇的運算符可能會產生重大差異。
在您的特定情況下,由于后綴的計算結果為原始值,并且相同算術運算符的運算順序從左到右 - 此處僅適用乘數 - 您的運算將按上述方式進行翻譯。

www說
TA貢獻1775條經驗 獲得超8個贊
后增量增加了的值i
,但不會立即分配新的值i
。
預增量增加值i
并立即分配新值。
因此,在您的 y, after 示例中i++
,
i
已經成為2
但它仍然堅持以前的價值1
。
發生時++i
,i
with 的值會增加1
,同時賦值給新的值3
。因此,給了我們的1 * 3 * 2
價值。6
y
也一樣x
,
發生時++x
,x
立即分配 的新值2
。
然而,當x++
發生時,x 增加了1
但仍被分配了先前的值2
。因此,2 * 2 * 2
給我們8
。
添加回答
舉報
0/150
提交
取消