
break 立即终止当前循环或 switch;continue 跳过本次循环剩余代码,直接进入下一轮判断。这不是语义区别,而是执行路径的硬性差异——错用一个,逻辑就全偏了。
什么时候必须用 break?
当满足某个条件后,你确定「后面所有迭代都不需要再跑了」,就必须用 break。典型场景包括:查找命中后退出、输入非法值立即中止、状态机切换完成。
- 在
for/while中,break会让控制流跳到循环体之后的第一条语句 - 在
switch中,break防止 case 穿透(fall-through),这是 Java 的强制习惯,不是可选项 - 嵌套循环里,不带标签的
break只跳出最内层循环——这点常被误认为能“全局退出”
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i == 2 && j == 3) break; // 只跳出内层 for,外层 i 还会继续到 4
System.out.println(i + "," + j);
}
}
continue 不是“跳到下一次”,而是“跳过现在”
continue 的本质是「提前结束本次循环体执行」,不是「立刻开始下一次」。它之后的语句被跳过,但循环变量更新(如 i++)和条件判断仍照常发生。
- 常用于数据过滤:比如遍历集合时跳过 null 或无效项
- 不能用在
switch外部(编译报错:continue outside of loop) - 和
break一样,不带标签的continue也只影响最近的循环
for (int i = 0; i < 10; i++) {
if (i % 3 == 0) continue; // i=0,3,6,9 时,下面的 println 不执行
System.out.println("i = " + i); // 输出:1,2,4,5,7,8
}
嵌套循环中想控制外层?必须加标签
默认的 break 和 continue 都只作用于最近的循环。想从内层直接干掉外层循环,就得用带标签的写法——这不是语法糖,是唯一可靠方案。
立即学习“Java免费学习笔记(深入)”;
- 标签名后跟冒号,写在循环语句前,例如:
outer: for (...) { ... } -
break outer;会直接跳出标为outer的那层循环 -
continue outer;会跳过当前外层循环本轮剩余部分,并执行外层循环变量更新+条件判断 - 标签名不能是关键字,也不能和变量/方法名冲突(否则编译失败)
outer: for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) break outer; // 直接退出外层 for
System.out.print(i + "," + j + " ");
}
}
// 输出:0,0 0,1 0,2 1,0
最容易被忽略的是:带标签的 continue 在外层是 for 循环时,会执行外层的「增量表达式」(如 i++),但很多人以为它等价于「goto 下次外层开头」——其实不是,它严格遵循 for 循环三段式的执行顺序。这点在调试逻辑跳跃时特别容易栽跟头。










