作者LPH66 (-858993460)
看板java
標題Re: [問題] 前置後置運算子的問題!?
時間Mon Dec 13 11:28:59 2010
※ 引述《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)
推 a1234957:很多老師會拿這個來考試喔 很酷喔 12/13 23:44
→ a1234957:印象中GCC和vs6 不一樣XD 12/13 23:46
推 gozha:我念成Leave Programming Hell... 12/16 11:21