break 與 return 都能提早離開迴圈,但影響範圍截然不同。本文透過完整程式碼與輸出結果對比,釐清兩者差異。
public class BreakVsReturn {
public static void main(String[] args) {
System.out.println("=== 正常迴圈 ===");
normalLoop();
System.out.println("\n=== break 離開迴圈 ===");
breakLoop();
System.out.println("\n=== return 離開方法 ===");
returnLoop();
}
static void normalLoop() {
for (int i = 1; i <= 5; i++) System.out.print(i + " ");
System.out.println("→ normal end");
}
static void breakLoop() {
for (int i = 1; i <= 5; i++) {
if (i == 3) break;
System.out.print(i + " ");
}
System.out.println("→ break end(繼續執行迴圈後代碼)");
}
static void returnLoop() {
for (int i = 1; i <= 5; i++) {
if (i == 3) return;
System.out.print(i + " ");
}
System.out.println("→ return end(永不會執行)");
}
}
=== 正常迴圈 === 1 2 3 4 5 → normal end === break 離開迴圈 === 1 2 → break end(繼續執行迴圈後代碼) === return 離開方法 === 1 2 → (方法直接結束,不列印 return end)
| 特性 | break | return |
|---|---|---|
| 作用範圍 | 僅離開當前迴圈/switch | 離開整個方法 |
| 迴圈後代碼 | 會執行 | 不會執行 |
| 適用場景 | 提早結束搜尋、驗證失敗 | 找到結果直接回傳、守衛條件 |
| 巢狀迴圈 | 僅跳出內層(可配合標籤跳出外層) | 直接跳出所有層級 |
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) break outer;
System.out.println("i=" + i + ", j=" + j);
}
}