do-while循环至少执行一次,因其条件判断在循环体执行之后;while循环先判断后执行,条件为假时一次也不执行;二者在break、continue行为及标签支持上存在差异。

do while 循环一定会执行至少一次
这是它和 while 最本质的区别:条件判断发生在循环体执行之后,所以不管 boolean 表达式初始值是 true 还是 false,do-while 的循环体都会先跑一遍。
常见错误现象:本想做“条件满足才进入”的逻辑,却误用了 do-while,结果第一次执行时用了未初始化的变量或空集合,直接抛出 NullPointerException 或逻辑错乱。
- 适用场景:需要「先尝试、再判断是否继续」的操作,比如用户输入校验、文件读取重试、状态轮询
- 不适用场景:初始化依赖条件成立(如
list != null && !list.isEmpty())再执行的逻辑 - 注意:循环末尾的分号
;是语法必需的,漏写会导致编译错误error: illegal start of expression
while 和 do while 的条件检查时机完全不同
while 是「先判后执」:每次循环开始前检查条件;do-while 是「先执后判」:每次循环结束时检查,决定是否再来一轮。
这意味着即使条件一开始就是 false,do-while 仍会执行一次循环体;而 while 会直接跳过整个循环块。
立即学习“Java免费学习笔记(深入)”;
int i = 0;
do {
System.out.println("do-while: " + i);
} while (i > 10); // 输出一行:do-while: 0
int j = 0;
while (j > 10) {
System.out.println("while: " + j);
} // 完全不输出
break 和 continue 在 do while 中的行为和 while 一致
它们的作用范围仍是当前最内层循环,不会因为语法结构不同而改变语义。但要注意 continue 会跳过本次循环剩余部分,直接跳到 while (condition) 的条件判断处——也就是说,它仍会触发条件检查,而不是无条件回到循环开头。
-
break:立即退出整个do-while块,执行后续代码 -
continue:跳过当次循环末尾的代码(如果有),直接求值并判断while(...)中的表达式 - 容易踩的坑:在
do-while中写continue后忘记更新循环变量,导致无限循环(因为条件检查前变量没变)
嵌套 do while 时 label 的使用受限
Java 不支持给 do-while 加标签(label:)然后用 break label 跳出多层——这不是语法错误,而是根本不能编译:error: illegal start of expression。只有 for、while、switch 支持带标签的 break 和 continue。
如果真有深层跳出需求,得改用 for 或 while,或者靠返回布尔值+方法拆分来规避。
这个限制常被忽略,尤其在从其他语言迁移或重构旧代码时,看到 do-while 就下意识加 label,结果卡在编译阶段。










