java - 这里发生了什么: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,我不明白如何以及为什么。
解决方案
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
where num1
is 5 的条件,结束循环。
推荐阅读
- php - 如何在 html_entity_decode() 之后计算字符串的总长度
- apache-kafka - S3 接收器记录字段 TimeBasedPartitioner 不起作用
- databricks - 使用 MongoDB-Atlas 配置 Databricks
- c++ - 如何从某些文件中读取并将它们的内容以不同的形式写入具有相同名称的文件中
- android - 改造自定义 HTML 响应正文解析
- javascript - 存在值时,Ionic 无法读取 null 的属性“xxx”
- boost-tuples - 从 boost::tuples::tuple 中检索字符串
- c# - 如何使用 jQuery 的 ajax 方法调用局部视图
- java - 使用不同键的多个 Multipart 静态调用
- jena - 如何加载从 protege 推断的公理并使用 OWL api 过滤它们