do-while循环至少执行一次,因条件判断在循环体后;while先判断后执行,条件为false时零次执行;java中do-while末尾分号不可省略。

do-while 循环一定会执行一次,哪怕条件一开始就是 false
这是最根本的区别:do-while 把条件判断放在循环体**之后**,所以不管 condition 是真是假,循环体至少执行一遍;而 while 是先判断再执行,条件为 false 时一次都不进。
常见错误现象:
用户想“重复输入直到输入合法”,却用了 while (input == null),结果第一次没给 input 赋值就直接跳过,程序逻辑断掉。
- 适用场景:需要“先做、再问”的操作,比如菜单选择、用户确认、初始化后校验
- 典型写法:
String input;<br>do {<br> input = scanner.nextLine();<br>} while (input == null || input.trim().isEmpty()); - 注意:如果循环体里有
break或异常提前退出,while和do-while的行为差异会更隐蔽
while 循环在条件为 false 时完全跳过,适合“守门式”控制
while 更符合直觉上的“当满足条件才执行”,天然适合边界检查、资源可用性判断等前置防护逻辑。
使用场景举例:
读文件前检查 file.exists()、遍历集合前判空、等待锁释放前检查状态。
- 性能影响几乎为零——两者编译后字节码差异极小,别为这个选型
- 但可读性上,
while在“可能零次执行”的意图表达上更清晰 - 容易踩的坑:
do-while写成while (true)+ 内部break,反而掩盖了真实退出条件,增加维护成本
Java 中 do-while 的分号不能省,否则编译报错
这是语法硬性要求:do-while 结构末尾必须带分号,而 while 不需要。漏掉就会触发 error: ';' expected。
错误写法:
do {<br> System.out.println("hello");<br>} while (count
- IDE 通常能高亮提示,但命令行编译时容易卡在这一步
- 和
for、while不同,do-while是唯一一个语句结尾强制加分号的循环结构 - 分号属于整个
do-while语句,不是while子句的一部分
嵌套或配合 continue/break 时,do-while 的执行路径更难推演
因为首次必执行 + 条件后置,一旦循环体内有 continue,它会跳过本次剩余逻辑,直接回到 while 条件判断——但此时已经算“第二次”了,和纯 while 的“第零次跳过”逻辑不在同一层面上。
容易踩的坑:
在 do-while 中用 continue 模拟“重试”,却忘了首次执行是无条件的,导致第一次本不该重试的操作也被包含进去。
- 建议:涉及复杂流程控制时,优先用
while+ 显式初始化,逻辑更线性 - 如果坚持用
do-while,把初始化逻辑拆到循环外,只留纯校验/交互部分在循环体内 - 调试时注意:断点打在
while条件行,看到它被跳过一次,不代表循环没运行——do块已经跑过了
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











