# 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寫法。