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

Java foreach 迴圈語法詳解:遍歷數組與集合、無法修改元素限制、適用場景對比

     編輯:Java 相關知識

語法結構

for (元素類型 變數 : 數組或集合) {
    // 變數依次取得每個元素
}

基本範例

String[] books = {"Java", "C", "C++", "C#", "ASP"};
for (String book : books) {
    System.out.println(book);
}
// 輸出每個書名

關鍵限制:無法修改原集合元素

for (String book : books) {
    book = "Hello"; // 僅修改區域變數引用
}
System.out.println(books[0]); // 仍輸出 "Java"

原因:foreach 實質上使用迭代器,變數是元素副本 (引用副本),重新賦值不影響原陣列/集合。

適用與不適用場景

場景建議替代方案
唯讀遍歷、打印、累加✅ foreach-
需修改元素值❌索引 for / ListIterator.set
需刪除元素❌ (拋 ConcurrentModificationException)Iterator.remove / removeIf
需索引 (如插入、比較相鄰)❌索引 for
多維數組✅ 巢狀 foreach-

底層實現原理

// 等價轉換
for (String book : books) { ... }
// ↓ 編譯器轉換為
for (int i = 0; i < books.length; i++) {
    String book = books[i];
    ...
}

// 集合轉換為 Iterator
for (String s : list) { ... }
// ↓
for (Iterator it = list.iterator(); it.hasNext(); ) {
    String s = it.next();
    ...
}

Java 8+ 增強:forEach + Lambda

books.forEach(System.out::println);
// 或
books.forEach(book -> System.out.println(book.toUpperCase()));

// 配合 Stream 過濾轉換
Arrays.stream(books)
    .filter(b -> b.startsWith("C"))
    .forEach(System.out::println);

最佳實務總結

  1. 預設遍歷首選 foreach / forEach,代碼簡潔、可讀性高。
  2. 需修改結構 (增/刪/改索引) → 索引 for 或 Iterator。
  3. 並行處理大量數據 → parallelStream() + forEach (注意線程安全)。
  4. 基本類型陣列 (int[]) 同樣支援 foreach,自動拆箱裝箱無額外開銷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved