Java中同一变量使用一元自增运算符的表达式求值顺序疑问:为何int i=1; System.out.println(i++ + ++i);输出结果为4?
关于Java中
i++ + ++i求值结果的疑惑解答 哈哈,这个问题我当初刚学Java的时候也纠结过好一阵!咱们来把这个逻辑掰扯清楚:
当你定义int i = 1;后执行System.out.println(i++ + ++i);,实际输出是4,而不是直觉里的3,问题出在你对后置自增运算符(i++)的执行逻辑理解不够透彻。
你之前的误区是:以为表达式只在顶层按从左到右求值,且只考虑优先级,但忽略了**i++的自增操作是在它自己的子表达式上下文里就完成的**——它不是只返回自增前的数值就结束,而是在返回1的同时,立刻把变量i的值改成了2。
咱们一步步拆解计算过程:
- 第一步计算左边的
i++:此时i初始值是1,i++会先把1返回给加法运算,同时立刻将i自增为2; - 第二步计算右边的
++i:这时候i已经是2了,前置自增运算符会先把i自增为3,再把3返回给加法运算; - 最后执行加法:1 + 3 = 4,这就是最终输出的结果。
简单来说,核心就是:后置自增的自增动作是即时的,不是等整个表达式跑完才执行。之前你误以为i++的自增要等++i之后才生效,但实际上i++执行完,i已经变成2了,后面的++i自然是在2的基础上往上加,结果就变成4了。
内容的提问来源于stack exchange,提问作者user1132655
相关产品推荐
相关产品推荐

