break 是一个关键字,它的作用是立即终止并跳出当前所在的循环,一旦 break 语句被执行,循环体内的后续代码将不再执行,程序流程会继续执行循环体之后的下一条语句。

break 在 for 循环中的基本用法
break 最常见的用途是在某个条件满足时,提前结束整个循环,而无需等待循环的自然结束(即条件变为 false)。
示例:在找到目标数字后停止循环
假设我们有一个数字数组,我们想找到第一个能被 5 整除的数字,找到后就不再继续查找了。
public class BreakExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println("开始查找第一个能被5整除的数字...");
for (int i = 0; i < numbers.length; i++) {
// 检查当前数字是否能被5整除
if (numbers[i] % 5 == 0) {
System.out.println("找到了!数字是: " + numbers[i]);
// 执行 break,立即跳出 for 循环
break;
}
// 如果没有 break,这行代码会在每次循环时执行
System.out.println("正在检查数字: " + numbers[i]);
}
System.out.println("循环已结束。");
}
}
输出结果:
开始查找第一个能被5整除的数字...
正在检查数字: 1
正在检查数字: 2
正在检查数字: 3
正在检查数字: 4
找到了!数字是: 5
循环已结束。
代码分析:

for循环开始,i从 0 到 9。- 当
i为 4 时,numbers[4]的值是 5。 if (5 % 5 == 0)这个条件为true。System.out.println("找到了!数字是: 5");被执行。break;语句被执行,for循环被立即终止。- 程序跳过
for循环中剩余的所有迭代(i=5到i=9的循环)。 - 执行
System.out.println("循环已结束。");。
break 在嵌套循环中的行为
当 break 位于嵌套循环(一个循环在另一个循环内部)中时,break 只会跳出它所在的那一层循环,而不会跳出所有循环。
示例:嵌套循环中的 break
public class NestedBreakExample {
public static void main(String[] args) {
System.out.println("开始嵌套循环示例...");
// 外层循环
for (int i = 1; i <= 3; i++) {
System.out.println("--- 外层循环第 " + i + " 次 ---");
// 内层循环
for (int j = 1; j <= 3; j++) {
System.out.println("内层循环: i=" + i + ", j=" + j);
// 当 j 等于 2 时,跳出内层循环
if (j == 2) {
System.out.println("内层循环在 j=2 时被 break 终止。");
break; // 这个 break 只会跳出内层 for 循环
}
}
// 这里是外层循环的循环体,当内层循环 break 后,程序会继续执行到这里
System.out.println("内层循环已结束,继续外层循环。");
}
System.out.println("所有循环都已结束。");
}
}
输出结果:
开始嵌套循环示例...
--- 外层循环第 1 次 ---
内层循环: i=1, j=1
内层循环: i=1, j=2
内层循环在 j=2 时被 break 终止。
内层循环已结束,继续外层循环。
--- 外层循环第 2 次 ---
内层循环: i=2, j=1
内层循环: i=2, j=2
内层循环在 j=2 时被 break 终止。
内层循环已结束,继续外层循环。
--- 外层循环第 3 次 ---
内层循环: i=3, j=1
内层循环: i=3, j=2
内层循环在 j=2 时被 break 终止。
内层循环已结束,继续外层循环。
所有循环都已结束。
代码分析:
- 每次进入外层循环,内层循环都会从
j=1开始。 - 在内层循环中,一旦
j变成 2,if条件满足,break就被执行。 - 这个
break只终止了内层循环,j=3的迭代被跳过。 - 外层循环不受影响,继续它的下一次迭代 (
i=2,i=3)。
如何使用 break 跳出多层嵌套循环?
如果确实需要从嵌套循环的最内层直接跳出所有外层循环,可以使用以下两种方法:

使用标签
Java 允许你为循环语句加上标签,break 可以通过指定标签来跳出特定的循环。
public class LabeledBreakExample {
public static void main(String[] args) {
System.out.println("开始使用标签跳出多层循环...");
// 为外层循环定义一个标签 "outerLoop"
outerLoop:
for (int i = 1; i <= 3; i++) {
System.out.println("--- 外层循环第 " + i + " 次 ---");
for (int j = 1; j <= 3; j++) {
System.out.println("内层循环: i=" + i + ", j=" + j);
if (i == 2 && j == 2) {
System.out.println("使用 break outerLoop 跳出所有循环。");
break outerLoop; // 跳出标签为 "outerLoop" 的那个循环
}
}
// 如果没有 break outerLoop,这行代码总会被执行
System.out.println("(如果未break,这里会显示)");
}
System.out.println("所有循环都已结束。");
}
}
输出结果:
开始使用标签跳出多层循环...
--- 外层循环第 1 次 ---
内层循环: i=1, j=1
内层循环: i=1, j=2
内层循环: i=1, j=3
(如果未break,这里会显示)
--- 外层循环第 2 次 ---
内层循环: i=2, j=1
内层循环: i=2, j=2
使用 break outerLoop 跳出所有循环。
所有循环都已结束。
代码分析:
- 当
i=2且j=2时,break outerLoop;执行。 - 程序立即跳出了标签为
outerLoop的for循环,即整个嵌套结构。 - 外层循环的第三次迭代 (
i=3) 和System.out.println("(如果未break,这里会显示)");都被跳过了。
使用标志位
这是一种更符合结构化编程思想的方法,通过设置一个布尔标志变量来控制循环的终止。
public class FlagBreakExample {
public static void main(String[] args) {
System.out.println("开始使用标志位跳出多层循环...");
boolean shouldBreak = false; // 标志位
for (int i = 1; i <= 3 && !shouldBreak; i++) { // 外层循环条件中加入 !shouldBreak
System.out.println("--- 外层循环第 " + i + " 次 ---");
for (int j = 1; j <= 3 && !shouldBreak; j++) { // 内层循环条件中也加入
System.out.println("内层循环: i=" + i + ", j=" + j);
if (i == 2 && j == 2) {
System.out.println("设置标志位,准备跳出所有循环。");
shouldBreak = true; // 设置标志位为 true
// 不需要 break,因为循环条件已经会检查它
// 但通常为了效率,还是会加上 break
break;
}
}
}
System.out.println("所有循环都已结束。");
}
}
这种方法虽然可行,但通常比使用标签更繁琐,因此需要跳出多层循环时,标签是更简洁的选择。
| 场景 | break 行为 |
示例 |
|---|---|---|
单层 for 循环 |
立即终止并跳出该 for 循环。 |
for (...) { if (...) break; } |
| 嵌套循环 | 只跳出 break 所在的那一层循环,不影响外层循环。 |
for (...) { for (...) { if (...) break; } } |
| 跳出多层嵌套循环 | 需要使用,在 break 后跟上标签名。 |
outer: for (...) { for (...) { if (...) break outer; } } |
break 是一个非常有用的控制流工具,但请谨慎使用,过度使用 break 可能会使代码的逻辑变得难以理解和跟踪(所谓的 "spaghetti code"),在大多数情况下,它应该用于处理异常情况或优化性能(如找到第一个匹配项后立即停止),如果逻辑复杂,可以考虑重构代码或将逻辑提取到单独的方法中,以减少对 break 的依赖。
