# For-each照妖鏡
###### tags: `NTU-CE` `Computer Programming` `Java` `Programming Language`
解釋for-each和傳統for loop的差別。
## 用for列舉array有兩種方式
以下用範例說明這兩種用法要注意的事情
```
public class Test {
public static void main(String[] args) {
int[] numbers = { 1, 2, 3 };
for (Integer e : numbers) { // Enhanced for loop (for-each)
System.out.print(e + " ");
e = e * 2;
}
System.out.print("\n");
for (int i = 0; i < numbers.length; i++) { // What does for-each exactly do...
Integer e = numbers[i];
System.out.print(e + " ");
e = e * 2;
}
System.out.print("\n");
for (int i = 0; i < numbers.length; i++) { // Traditional for loop
System.out.print(numbers[i] + " ");
}
System.out.print("\n");
for (int i = 0; i < numbers.length; i++) { // Traditional for loop for changing elements in array
numbers[i] = numbers[i] * 2;
System.out.print(numbers[i] + " ");
}
}
}
```
首先要分辨e跟numbers的元素是不是存在電腦裡的相同記憶體位址?
若不是,當我們操作e就無法改變到numbers裡的元素了。
在範例裡面:
第一個迴圈是enhanced for loop的用法。
第二個迴圈是把第一個迴圈打回原貌。
我們看第三個迴圈印出來的東西,可以知道foreach改變不了numbers,於是我們用第四個迴圈才能達到我們真正想要的操作 。
## 結論
如果是只想要「取出」陣列裡的值,把它們印出來或是存到別的變數裡,就可以用for-each;如果要「改變」陣列裡的值,就必須用傳統的for loop寫法。