亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

包含前增量和后增量的函數的結果不同

包含前增量和后增量的函數的結果不同

小唯快跑啊 2023-05-10 15:04:09
我必須理解一些混合函數前后增量的代碼。有一件事讓我很困惑。所以我嘗試測試一些較小的功能。但我無法解釋以下行為: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++) 評估為原始值。如果您只是執行簡單的遞增/遞減,那么選擇哪個版本并不重要。但是,如果您在較大表達式的一部分中使用此運算符,則您選擇的運算符可能會產生重大差異。

在您的特定情況下,由于后綴的計算結果為原始值,并且相同算術運算符的運算順序從左到右 - 此處僅適用乘數 - 您的運算將按上述方式進行翻譯。


查看完整回答
反對 回復 2023-05-10
?
www說

TA貢獻1775條經驗 獲得超8個贊

后增量增加了的值i,但不會立即分配新的值i。

預增量增加值i并立即分配新值。

因此,在您的 y, after 示例中i++,

i已經成為2但它仍然堅持以前的價值1。

發生時++i,iwith 的值會增加1,同時賦值給新的值3。因此,給了我們的1 * 3 * 2價值。6y

也一樣x,

發生時++xx立即分配 的新值2。

然而,當x++發生時,x 增加了1 仍被分配了先前的值2。因此,2 * 2 * 2給我們8。


查看完整回答
反對 回復 2023-05-10
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號