1. 概述
本文带你深入理解 Java 中的一个基础但至关重要的控制结构——while
循环。它用于在条件为真时,重复执行一段代码逻辑,是编写动态流程控制的必备技能。
对于有经验的开发者来说,while
可能看起来简单,但在复杂业务逻辑、状态轮询、资源等待等场景下,用好它能避免不少踩坑。
2. While 循环详解
while
循环是 Java 中最原始、最直接的循环结构之一。它的核心逻辑是:只要布尔表达式为 true
,就持续执行循环体。
2.1 基本语法
while (布尔表达式)
语句;
或者更常见的块形式:
while (布尔表达式) {
// 多条语句
}
⚠️ 关键点:布尔表达式在每次循环开始前都会被评估,包括第一次。这意味着:
- ✅ 如果条件一开始就是
false
,循环体一次都不会执行 - ❌ 这与
do-while
不同,后者至少执行一次
这个特性在处理边界条件时要特别注意,否则容易出现“预期会执行但实际跳过”的 bug。
2.2 简单示例
下面是一个典型的计数循环:
int i = 0;
while (i < 5) {
System.out.println("While loop: i = " + i++);
}
输出结果为:
While loop: i = 0
While loop: i = 1
While loop: i = 2
While loop: i = 3
While loop: i = 4
📌 解析:
i++
是后缀自增,先使用i
的值,再加 1- 循环从
i = 0
开始,到i = 4
结束,共执行 5 次 - 当
i = 5
时,条件i < 5
不成立,循环终止
2.3 实际应用场景
虽然 for
循环在计数场景更常见,但 while
在以下情况更合适:
✅ 不确定迭代次数的场景
比如读取流、监听状态、等待资源就绪:
BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
String line;
while ((line = reader.readLine()) != null) {
process(line);
}
✅ 条件依赖外部变化
例如轮询某个标志位:
while (!task.isCompleted()) {
Thread.sleep(100);
}
⚠️ 踩坑提醒:
- 忘记在循环体内修改条件变量,导致死循环
- 在多线程环境下未正确同步共享变量,造成无限等待
3. 总结
while
循环看似简单,但它是构建复杂控制流的基石。掌握其“先判断后执行”的特性,能帮助你在处理异步任务、I/O 流、状态机等场景时写出更稳健的代码。
文中所有示例代码均可在 GitHub 上找到:
https://github.com/baeldung/core-java-modules/tree/master/core-java-lang-syntax