for 循环的结构非常清晰,它由三个部分组成,这三个部分都用分号隔开:

for (初始化部分; 循环条件; 更新部分) {
// 循环体:要重复执行的代码
}
下面我们逐一解析这三个部分,特别是与“变量赋值”相关的部分。
初始化部分
这是 for 循环的起点,它只在循环开始之前执行一次,我们在这里声明并初始化一个用于控制循环次数的变量,这个变量被称为循环计数器或循环变量。
与变量赋值的关系: 这里的“赋值”通常指变量的声明和初始化,你可以:
- 声明一个新变量并赋值(最常见)。
- 给一个已经存在的变量赋值。
示例 1:声明并初始化一个新变量(最常用)
这是最标准、最常见的用法,我们在这里声明一个 int 类型的变量 i,并给它赋初值 0。

for (int i = 0; i < 5; i++) {
System.out.println("当前循环次数: " + i);
}
执行流程:
int i = 0;:声明一个整型变量i,并将其赋值为0。(仅执行一次)i < 5;:判断条件i是否小于 5。0 < 5为true。- 执行循环体,打印 "当前循环次数: 0"。
i++:执行更新部分,i的值变为1。- 再次判断
i < 5(1 < 5为true),执行循环体... - ...直到
i变为5,i < 5为false,循环结束。
示例 2:给已存在的变量赋值
如果你在循环之前已经定义了变量,也可以在这里给它重新赋值。
int count = 100; // 循环前已存在的变量
System.out.println("循环前的 count 值: " + count);
for (count = 0; count < 3; count++) {
System.out.println("循环中的 count 值: " + count);
}
System.out.println("循环后的 count 值: " + count); // 循环结束后,count 的值是 3
注意: 这种方式会修改外部变量的值,在循环结束后,count 的值会保留最后一次更新后的值(这里是 3)。
示例 3:初始化多个变量
你可以在初始化部分声明并初始化多个同类型的变量,用逗号隔开。

for (int i = 0, j = 10; i < j; i++, j--) {
System.out.println("i: " + i + ", j: " + j);
}
这个循环会同时从 i=0 和 j=10 开始,每次迭代 i 加 1,j 减 1,直到 i 不再小于 j。
循环条件
这部分是一个布尔表达式(boolean expression),每次循环开始前都会被判断,如果结果为 true,则执行循环体;如果为 false,则循环终止。
与变量赋值的关系: 这部分通常不直接进行赋值,而是对变量进行比较,它依赖于初始化部分定义的变量,或者更新部分修改后的变量值。
示例
for (int i = 0; i < 10; i++) {
// ...
}
这里的 i < 10 就是循环条件,它检查 i 的值是否小于 10,而不是给 i 赋值。
更新部分
这部分在每次循环体执行完毕后执行,它的主要目的是更新循环计数器的值,以便最终能让循环条件变为 false,从而使循环能够正常结束。
与变量赋值的关系: 这里的“赋值”是通过更新运算符或赋值表达式来完成的。
示例 1:使用一元后缀递增/递减运算符(最常用)
这是最简洁、最常见的更新方式。
for (int i = 0; i < 5; i++) { // i++ 等同于 i = i + 1
// ...
}
for (int k = 10; k > 0; k--) { // k-- 等同于 k = k - 1
// ...
}
示例 2:使用其他赋值或复合赋值运算符
你可以根据需要使用任何能改变变量值的表达式。
// 每次加 2
for (int i = 0; i < 10; i = i + 2) {
System.out.println("i: " + i); // 输出 0, 2, 4, 6, 8
}
// 使用复合赋值
for (int score = 100; score > 0; score -= 10) {
System.out.println("剩余分数: " + score); // 输出 100, 90, 80, ..., 10
}
重要知识点和最佳实践
作用域
在 for 循环的初始化部分声明的变量,其作用域仅限于该 for 循环内部,循环结束后,该变量会被销毁。
for (int i = 0; i < 5; i++) {
// 在这里可以使用 i
}
// System.out.println(i); // 编译错误!变量 i 在此处已不存在,无法访问
好处: 这可以避免变量名污染,防止在循环外部意外修改循环变量,是更安全的编程实践。
省略部分 for 循环结构
for 循环的三个部分都是可以省略的,但分号不能省。
-
省略初始化部分: 如果循环变量已经在循环前声明并初始化。
int i = 0; for (; i < 5; i++) { System.out.println(i); } -
省略更新部分: 如果你在循环体内部手动更新变量。
int i = 0; for (; i < 5; ) { System.out.println(i); i++; // 手动更新 } -
省略条件部分: 如果省略,条件默认为
true,这会导致一个无限循环,你需要使用break语句在某个条件下退出循环。int i = 0; for (; ; ) { // 无限循环 System.out.println(i); i++; if (i >= 5) { break; // 当 i 大于等于 5 时,退出循环 } }
for-each 循环(增强型 for 循环)
这是 Java 5 引入的一种简化语法,专门用于遍历数组或集合,它不使用传统的索引变量,而是直接获取元素。
与变量赋值的关系: 这里会声明一个临时变量,用于接收数组或集合中的每一个元素。
String[] names = {"Alice", "Bob", "Charlie"};
// 语法: for (元素类型 元素变量 : 要遍历的数组/集合)
for (String name : names) {
// name 是一个临时变量,每次循环被赋予数组中的一个元素
System.out.println(name);
}
执行流程:
String name = "Alice";:将names数组的第一个元素赋给name。- 执行循环体,打印 "Alice"。
- 将
names数组的第二个元素 "Bob" 赋给name。 - 执行循环体...
- 遍历完所有元素后,循环自动结束。
注意: for-each 循环不能通过修改 name 来改变原数组中的元素,因为 name 只是一个值的副本。
for 循环部分 |
作用 | 与变量赋值的关系 | 示例 |
|---|---|---|---|
| 初始化部分 | 只在循环开始前执行一次 | 声明并初始化一个或多个循环变量,或给已有变量赋值。 | int i = 0; 或 count = 0; |
| 循环条件 | 每次循环前判断,决定是否继续循环 | 不直接赋值,通常是比较运算(<, >, 等)。 |
i < 10; |
| 更新部分 | 每次循环体执行完后执行 | 更新循环变量的值,通常使用递增/递减或赋值运算符。 | i++ 或 i = i + 2; |
理解这三个部分中变量赋值和更新的机制,是掌握 for 循环的关键,对于简单的遍历,推荐使用更简洁的 for-each 循环;对于需要索引或复杂控制逻辑的场景,则使用传统的 for 循环。
