1. 程式人生 > >【Java】 foreach對陣列賦值問題

【Java】 foreach對陣列賦值問題

  今天寫程式碼時發現瞭如下問題:

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僅可用於遍歷輸出陣列,但不能用於修改陣列。