for (ElementType variable : iterableObject) {
// 使用 variable
}
int[], String[] 等)Iterable<E> 接口的集合(List, Set, Queue 等)編譯器將其轉換為迭代器模式:
// 數組版本
for (int i = 0; i < arr.length; i++) {
ElementType var = arr[i];
// body
}
// 集合版本
for (Iterator<ElementType> it = coll.iterator(); it.hasNext(); ) {
ElementType var = it.next();
// body
}
| 優點 | 缺點 |
|---|---|
| 語法簡潔,可讀性強 | 無法獲取索引/下標 |
| 避免下標越界錯誤 | 不能在遍歷時修改集合結構(增/刪元素) |
| 統一了數組與集合遍歷語法 | 不支持反向遍歷或步長控制 |
public enum Weekday { Sun, Mon, Tue, Wed, Thu, Fri, Sat }
Weekday[] days = Weekday.values();
for (Weekday day : days) {
System.out.println(day); // 依次輸出 Sun, Mon, ...
}
day 是元素的**副本**(基本類型)或**引用副本**(引用類型),修改它不影響原數組/集合元素。Iterator.remove() 或反向下標循環。stream().forEach(),函數式風格更靈活。掌握 for-each 的轉換規則與適用邊界,寫出更優雅、安全的遍歷代碼。