作者jacky0816 (jacky)
看板java
标题[问题] i += i++ 问题
时间Sun Jun 19 12:17:16 2022
新手遇到一个问题
int i = 5;
i += i++;
跑出来是10
请问怎运作的? 为何i++最後没加1
--
Sent from nPTT on my iPhone 6s
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 27.51.106.23 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1655612238.A.2BD.html
1F:推 aidansky0989: 试试这个i+=++i 06/19 12:22
2F:→ aidansky0989: 先讲结论i ++是先赋值i 再++,++i 是先执行++再赋值 06/19 12:24
3F:推 LPH66: 首先 = 右边的 i++ 会先算完, 此时 i 变成 6, 但 i++ 式子 06/19 12:43
4F:→ LPH66: 求得的结果是 5 (i 原先的值); 然後再运算 +=, 所以 i += 5 06/19 12:44
5F:→ LPH66: 但是这条式子的 i 的值在先前处理 += 还没到 ++ 时已经抓了 06/19 12:46
6F:→ LPH66: 所以它还是会拿原值 5 跟 i++ 获得的 5 相加得到 10 06/19 12:47
7F:推 b9502056: i+=(..)等同於i=i+(..) ,++是此line执行後才执行i=i+1 06/20 04:39
8F:→ b9502056: i += i++; 等同 i=i+i; i=i+1; 06/20 04:40
9F:→ b9502056: i += i++; 不需要纠结在这种写法,没人会这样写,这种写 06/20 04:44
10F:→ b9502056: 法只会增加维护成本 06/20 04:44
11F:→ gasbomb: 同意楼上 不用太执着奇怪写法的执行结果 06/22 00:56
12F:→ gura9527: 虽然是考试才会用到的东西,但不知道其实也不好。 06/23 12:53
13F:推 LPH66: 会不好吗? 既然都考试才会用到了, 少掉这一题会有什麽关系? 06/23 23:59
14F:→ jej: 这写法 除了这篇看到以外 上次看到应该是考证照的时候了 06/24 12:32
15F:推 pupuliao: 这只是坑死自己的写法吧 06/29 15:03
16F:→ pupudice: 你就想i ++ -> getAndAdd 07/04 12:03
17F:→ pupudice: ++i addAndGet 07/04 12:03
18F:推 qrtt1: 他的不是单纯的 ++ 07/04 12:22
19F:→ laputaflutin: 原来证照考试考这种哦…也太浪费生命 08/11 02:50
20F:推 HMKRL: 何必写这种Code找所有人麻烦呢XD 08/22 23:38
21F:推 choosin: 这种东西就是语言规格跟编译器实作爽就好 对开发维护者没 09/16 09:16
22F:→ choosin: 什麽意义 取舍是可读、好写跟效率 09/16 09:24
23F:→ MonyemLi: 可以延伸做是否诶理解,但不好阅读,不建议使用 09/16 21:46