首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 三大循環語句差異對比:for、while、do-while 核心區別

     編輯:Java 相關知識

核心差異一覽表

維度for 循環while 循環do-while 循環
判斷時機每次迭代前每次迭代前每次迭代後
最少執行次數0 次0 次1 次 (先執行體,後判斷)
語法結構for(初始化; 條件; 更新) {體}while(條件) {體}do {體} while(條件);
變量作用域初始化變量僅循環內可見外部定義,循環後仍可見外部定義,循環後仍可見
典型適用場景已知次數、計數器、遍歷未知次數、條件驅動、流讀取菜單交互、輸入驗證、至少一次處理

語法示例對比

場景:計算 1 到 100 累加和

// for 循環
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum += i;
}

// while 循環
int sum = 0, i = 1;
while (i <= 100) {
    sum += i;
    i++;
}

// do-while 循環
int sum = 0, i = 1;
do {
    sum += i;
    i++;
} while (i <= 100);

場景:讀取用戶輸入直到輸入 "exit"


// while: 可能零次執行 (首次輸入即 exit)
Scanner sc = new Scanner(System.in);
String input;
while (!(input = sc.nextLine()).equals("exit")) {
    System.out.println("收到: " + input);
}

// do-while: 保證至少提示一次
do {
    System.out.print("請輸入: ");
    input = sc.nextLine();
    if (!input.equals("exit")) System.out.println("收到: " + input);
} while (!input.equals("exit"));

增強 for 循環 (for-each)

// 僅用於遍歷集合/數組,無索引、不可修改結構
List list = Arrays.asList("A", "B", "C");
for (String s : list) {
    System.out.println(s);
}

// 編譯器轉為 Iterator (集合) 或 索引訪問 (數組)
// 非 RandomAccess 集合 (LinkedList) 效率等同手寫 Iterator

循環控制語句

  • break:立即退出最近一層循環
  • continue:跳過本次迭代剩餘,進入下一次判斷
  • 標籤 label::配合 break/continue 控制外層循環
// 雙層循環查找
outer:
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (i == 1 && j == 2) {
            System.out.println("Found at " + i + "," + j);
            break outer; // 直接跳出雙層
        }
    }
}

性能本質

  • 三大基礎循環編譯後字節碼幾乎等價,JIT 編譯器生成相同機器碼
  • for-each 編譯為 Iterator/索引訪問,性能與手寫等效
  • 微優化 (緩存長度、反向循環、基本類型) 僅在極熱點循環有意義

選擇決策樹

需要索引/計數器?
  ├─ 是 → for (int i=0; i

常見錯誤

  1. 邊界錯誤:i <= size() → 越界,正確 i < size()
  2. 循環中修改集合:拋 ConcurrentModificationException → 用 Iterator.remove()/removeIf()
  3. 死循環:while(true) 缺 break → CPU 100%
  4. 浮點判斷:for(double d=0; d!=1.0; d+=0.1) 可能永不結束 → 用整數計數

總結

for、while、do-while 核心區別在於判斷時機 (前/後)與最少執行次數 (0/1)。語義選擇:已知次數 for、條件驅動 while、至少一次 do-while、遍歷 for-each、複雜管道 Stream。性能無本質差異,JIT 自動優化。避開邊界、集合修改、死循環、浮點判斷四大常見陷阱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved