Java循环语句for、while和do-while的用法

for循环适合已知迭代次数的场景,其三部分结构逻辑集中、不易漏更新,常见错误是分号位置写错。

for 循环适合已知迭代次数的场景

当你清楚要执行多少次,或者遍历一个确定长度的数组、集合时,for 最直观。它的三部分结构(初始化、条件判断、更新)写在一行,逻辑集中,不易漏掉循环变量更新。

常见错误是把分号写错位置,比如 for (int i = 0; i 结尾多了一个分号,导致循环体为空,只执行了五次空操作。

  • 初始化语句只执行一次,通常定义并赋值循环变量
  • 条件表达式在每次循环开始前判断,为 false 时立即退出
  • 更新语句在每次循环体执行完后运行,不是在条件判断之后立刻执行
for (int i = 0; i < 3; i++) {
    System.out.println("i = " + i);
}
// 输出:i = 0, i = 1, i = 2

while 循环强调“条件优先”,适合不确定次数但有明确退出条件的情况

while 在进入循环体前就检查条件,如果初始条件就不满足,循环体一次都不会执行。它比 for 更灵活,适合读取输入、等待状态变化、处理链表等。

容易踩的坑是忘记在循环体内修改判断变量,造成死循环;或者把条件写反,比如用 != 判断浮点数是否到达目标值,因精度问题永远不相等。

  • 必须确保循环体内有能影响条件表达式的语句
  • 条件中避免使用 ==!= 比较浮点数
  • 如果需要先执行再判断,别硬套 while,改用 do-while
int count = 0;
while (count < 3) {
    System.

out.println("count = " + count); count++; // 忘记这行就会死循环 }

do-while 至少执行一次,适合“先做再问”的交互逻辑

do-while 的特点是循环体无条件执行一次,然后才检查条件。它天然适合菜单选择、用户输入校验这类“至少试一次”的场景。

注意分号不能省:do { ... } while (condition); 结尾的分号是语法必需,漏掉会编译报错 error: ';' expected

  • 条件写在末尾,括号外必须带分号
  • 条件判断的是“是否继续”,不是“是否开始”
  • while 相比,它不适用于需要跳过首次执行的逻辑
int choice;
do {
    System.out.print("Enter 1 to continue, 0 to exit: ");
    choice = scanner.nextInt();
} while (choice != 0);

三种循环性能没区别,选哪个取决于控制逻辑的自然性

JVM 对这三种循环生成的字节码几乎一致,性能差异可以忽略。真正影响可读性和健壮性的是你是否匹配了语义:遍历数组用 for,等待某个状态用 while,强制至少执行一次用 do-while

一个常被忽略的细节是作用域:在 for (int i = 0; ...) 中声明的 i 只在循环内可见;而 whiledo-while 中若在外部声明变量,该变量在循环结束后仍可访问——这点会影响命名冲突和内存生命周期判断。