Java 三大循環語句深度對比:for、while、do-while 異同詳解
語法結構對比
| 循環類型 | 語法格式 | 執行順序 | 適用場景 |
| for |
for(初始化; 條件; 迭代) { 體 } |
初始化 → 判斷條件 → 執行體 → 迭代 → 判斷條件... |
已知循環次數、遍歷集合/數組、計數器控制 |
| while |
初始化; while(條件) { 體; 迭代; } |
初始化 → 判斷條件 → 執行體 → 迭代 → 判斷條件... |
未知循環次數、條件驅動、讀取流/數據庫結果集 |
| do-while |
初始化; do { 體; 迭代; } while(條件); |
初始化 → 執行體 → 迭代 → 判斷條件 → 執行體... |
至少執行一次、菜單選擇、用戶輸入驗證 |
代碼示例:計算 1-100 累加和
for 循環
public class ForDemo {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum); // 5050
}
}
while 循環
public class WhileDemo {
public static void main(String[] args) {
int sum = 0;
int i = 1; // 初始化
while (i <= 100) { // 判斷
sum += i; // 體
i++; // 迭代
}
System.out.println("sum = " + sum); // 5050
}
}
do-while 循環
public class DoWhileDemo {
public static void main(String[] args) {
int sum = 0;
int i = 1;
do {
sum += i; // 體
i++; // 迭代
} while (i <= 100); // 判斷
System.out.println("sum = " + sum); // 5050
}
}
核心區別總結
- 首次執行保證:
do-while 無條件執行一次循環體,然後判斷條件;for 和 while 是先判斷後執行,若初始條件不滿足則一次不執行。
- 變量作用域:
for 循環的初始化變量(如 int i=1)作用域僅限循環內部;while/do-while 的控制變量通常定義在外部,作用域較大。
- 語義清晰度:
for:語義為「重複 N 次」,所有控制元素集中在括號內,閱讀性最佳。
while:語義為「當條件成立時持續」,適合條件複雜或由外部決定的場景。
do-while:語義為「先做一次,再決定是否繼續」。
- 相互轉換:三者邏輯等價,可相互轉換。但首選最語義化的寫法,降低認知負荷。
常見陷阱與最佳實踐
- 死循環:
while(true) 或 for(;;) 需配合 break 退出,否則程序掛起。
- 邊界條件:注意
<= vs <,i++ vs ++i 在循環條件中的細微差別。
- 資源關閉:
while((line = reader.readLine()) != null) 模式讀取流時,確保 finally 關閉資源(或 try-with-resources)。
- 增強 for (for-each):Java 5+ 提供
for(Type item : collection),簡化集合/數組遍歷,無索引需求時優先使用。