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

Java for 與 foreach 迴圈深度解析

     編輯:Java 相關知識

Java 迴圈機制:for vs foreach 完整比較

核心差異總覽

  • for 迴圈條件判斷變數只取值一次(詳細見文末說明)。
  • foreach (Java 5 新增) 遍歷陣列/集合時效能優異。
  • foreach 是 for 的語法糖,但無法完全取代 for:所有 foreach 可改寫為 for,反之不然。
  • foreach 非關鍵字,遍歷對象通常為集合或陣列。

foreach 語法格式

for (元素類型T 元素變數名O : 遍歷對象) {
    // 對 O 進行操作
}

常見使用範例

1. 遍歷陣列

String[] names = {"beibei", "jingjing"};
for (String name : names) {
    System.out.println(name);
}

2. 遍歷 List

List<String> list = new ArrayList<>();
list.add("a"); list.add("b"); list.add("c");
for (String str : list) {
    System.out.println(str);
}

關鍵限制:無法在遍歷過程中修改來源

foreach 僅能遍歷,無法在遍歷過程中修改原陣列或集合內容,for 迴圈則可。

陣列修改測試

String[] names = {"beibei", "jingjing"};

// foreach:無法修改原陣列
for (String name : names) {
    name = "huanhuan"; // 只修改區域變數引用
}
System.out.println("foreach: " + Arrays.toString(names)); // [beibei, jingjing]

// for:可修改原陣列
for (int i = 0; i < names.length; i++) {
    names[i] = "huanhuan";
}
System.out.println("for: " + Arrays.toString(names)); // [huanhuan, huanhuan]

集合修改測試

List<String> names = new ArrayList<>();
names.add("beibei"); names.add("jingjing");

// foreach:無法修改集合元素
for (String name : names) {
    name = "huanhuan";
}
System.out.println(names); // [beibei, jingjing]

// for:可修改集合元素
for (int i = 0; i < names.size(); i++) {
    names.set(i, "huanhuan");
}
System.out.println(names); // [huanhuan, huanhuan]

特殊注意事項

foreach 底層實際使用迭代器,若在遍歷中調用集合的 remove/add 會拋出 ConcurrentModificationException。需使用迭代器自身的 remove() 方法或採用 for 迴圈倒序遍歷刪除。

for 迴圈條件判斷變數只取值一次說明

在 for (int i = 0; i < list.size(); i++) 中,list.size() 在每次迴圈迭代前都會重新計算;但若寫成 int len = list.size(); for (int i = 0; i < len; i++) 則只計算一次。這對於動態變化的集合大小有顯著影響。

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