【Java】 foreach對陣列賦值問題
阿新 • • 發佈:2018-11-13
今天寫程式碼時發現瞭如下問題:
public class Test { public static void main(String[] args) { int[] arr= new int[5]; for (int a : arr) { a=1; } System.out.println(Arrays.toString(arr)); } }
[0, 0, 0, 0, 0]
可以看出,使用foreach方法沒辦法給陣列賦值。
實際上,foreach語句
for (int a : arr) { a=1; }
相當於:
for(int i=0;i<arr.length;i++) { int a=arr[i]; a=1; }
使用foreach時,是賦值給了一個臨時變數,採用值傳遞,臨時變數的改變並不會改變arr[i]本身,與如下程式碼的原理相同:
int a = 1; int b = a; b = 2; System.out.println(a); //a不會隨著b改變
因此,以後在使用foreach時要注意:foreach僅可用於遍歷輸出陣列,但不能用於修改陣列。