首页 > 解决方案 > 这里发生了什么:sum += i++;?

问题描述

我有这段简单的代码,但我不明白这部分:sum += i++.

int num1 = 5;
int sum = 0;
         
if (num1 < 100) {
    for (int i = 0; i < num1; i++)
        sum += i++; //?
    System.out.println("sum = " + sum);
} else {
    sum = -1;
}
System.out.print(sum);  

我得到的结果是 6,我不明白如何以及为什么。

标签: javalogicincrementpostfix-operator

解决方案


sum += i++相当于sum = sum + i; i = i + 1


这会将您的代码转换为:

int num1 = 5;
int sum = 0;
         
if (num1 < 100) {
    for (int i = 0; i < num1; i++) //<-- i is incremented
        sum = sum + i; //<-- sum gets incremented by i here
        i = i + 1; //<-- i is incremented again, increment/loop-cycle ratio = 2
    System.out.println("sum = " + sum);
} else {
    sum = -1;
}
System.out.print(sum);  

i每个循环周期递增 2,并且每个循环周期sum递增i


结果是 6,因为:

您在i0 和sum0 的位置开始循环。

在第一个循环循环sum上加 0,i加 2 (2)。

在第二个循环周期,sum增加 2 (2) 并i增加 2 (4)。

在第三个循环周期,sum增加 4 (6) 并i增加 2 (6)。

至此,i不再满足i < num1where num1is 5 的条件,结束循环。


推荐阅读