为何如下Java代码片段运行后sum值为16?我的推导逻辑错在哪里
Java代码运行结果解释
int sum = 1; for (int i = 0; i <= 5; sum = sum + i++) System.out.println(sum);
核心错误原因
你的推导主要混淆了Java for 循环各部分的执行顺序,Java中标准for循环的执行逻辑为:
- 先执行初始化语句(
for括号内第一部分,全局仅执行一次) - 校验循环条件(第二部分),结果为
false则直接退出循环 - 条件为
true时,先执行循环体代码 - 最后执行迭代语句(第三部分)
- 回到第2步重新校验循环条件
同时你也搞错了首次迭代时i的取值,后置自增i++会先取i的当前值参与运算,再完成自增。
逐轮执行过程
我们逐次跟踪sum和i的数值变化:
- 初始状态:
sum = 1 - 首次执行初始化语句:
i = 0
- 第1轮循环校验:
0 <=5成立
执行循环体:打印sum的值为1
执行迭代语句:sum = 1 + 0(i当前为0,参与运算后自增为1),此时sum = 1
- 第2轮循环校验:
1 <=5成立
执行循环体:打印sum的值为1
执行迭代语句:sum = 1 + 1(i当前为1,参与运算后自增为2),此时sum = 2
- 第3轮循环校验:
2 <=5成立
执行循环体:打印sum的值为2
执行迭代语句:sum = 2 + 2(i当前为2,参与运算后自增为3),此时sum = 4
- 第4轮循环校验:
3 <=5成立
执行循环体:打印sum的值为4
执行迭代语句:sum = 4 + 3(i当前为3,参与运算后自增为4),此时sum = 7
- 第5轮循环校验:
4 <=5成立
执行循环体:打印sum的值为7
执行迭代语句:sum = 7 + 4(i当前为4,参与运算后自增为5),此时sum = 11
- 第6轮循环校验:
5 <=5成立
执行循环体:打印sum的值为11
执行迭代语句:sum = 11 + 5(i当前为5,参与运算后自增为6),此时sum = 16
- 第7轮循环校验:
6 <=5不成立,直接退出循环
从数学计算上也可以验证:sum初始值为1,迭代语句一共累加了i从0到5的所有值,0+1+2+3+4+5=15,1+15=16,和运行结果一致。
内容的提问来源于stack exchange,提问作者kafkashores
相关产品推荐
相关产品推荐

