作者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)
1F:推 a1234957:很多老师会拿这个来考试喔 很酷喔 12/13 23:44
2F:→ a1234957:印象中GCC和vs6 不一样XD 12/13 23:46
3F:推 gozha:我念成Leave Programming Hell... 12/16 11:21