Re: [問題] 前置後置運算子的問題!?
※ 引述《st84514 (綜合水果武士)》之銘言:
: int z=-1;
: System.out.println(++z);
: System.out.println(z--);
: System.out.println(z++ + z);
: System.out.println(z + z++);
: 從上面程式來看輸出會為0 0 -1 0
: 小弟不懂的是第三行輸出為啥是-1?第二行輸出結束後z=-1
: 到第三行不是先把-1+-1=-2輸出後再把z+1嗎?
: 那這樣最後一行輸出又怎會是0???
: 有請高手指導!謝謝!
根據 JLS 15.7.1
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.7.1
那個 加 的左邊會先完全做完再做右邊
所以是 z++ (將 z 設為 0 且回傳 -1) 做完後再取右邊的 z (取得 0)
因此這個 + 做了 -1 + 0 故輸出 -1
此時 z 為 0
第四行也一樣
左邊的 z 先取完 (取得 0) 後再做右邊的 z++ (將 z 設為 1 且回傳 0)
因此這個 + 做了 0 + 0 故輸出 0
此時 z 為 1
--
同一個問題丟去 C_and_CPP 版會有很多人跟你說很恐怖不要這樣做...XD
因為 C/C++ 的確沒有定義這種式子會怎麼算
而 Java 在上面那一節有定義了而已
不過說起來我個人依然不推薦這種寫法 徒增困擾而已
--
"LPH" is for "Let Program Heal us"....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.92
※ 編輯: LPH66 來自: 140.112.28.92 (12/13 11:30)
※ 編輯: LPH66 來自: 140.112.28.92 (12/13 11:31)
推
12/13 23:44, , 1F
12/13 23:44, 1F
→
12/13 23:46, , 2F
12/13 23:46, 2F
推
12/16 11:21, , 3F
12/16 11:21, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):