java - 这里发生了什么 : sum += i++;?

标签 java logic increment postfix-operator

我有这段简单的代码,但我不明白这部分: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,我不明白如何以及为什么。

最佳答案

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,因为:
您开始循环,其中 i是 0 和 sum是 0。
在第一个循环周期 sum递增 0,i增加 2 (2)。
在第二个循环周期中,sum增加 2 (2) 和 i增加 2 (4)。
在第三个循环周期,sum增加 4 (6) 和 i增加 2 (6)。
此时,i不再满足条件i < num1哪里num1是 5,并结束循环。

关于java - 这里发生了什么 : sum += i++;?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67525682/

相关文章:

logic - 我如何在精益中证明这一点? p ∨ Øp

memory-management - PLC 梯形图逻辑 - 内存和处理管理

c - 为什么这些构造使用前后递增的未定义行为?

python - 尝试在此单行循环中增加 Y

Java - 如何从结果集中构造java对象

Java 图形 JApplet

java - 如何设置 Spring Retry 模板重试最大次数 : infinite

Mysql查询逻辑没有得到相同的结果

MySQL : add data from another database, 从特定行开始,user_id 为主,需要插入从 20 开始递增的数字

java - 按整数排序列表