今天写代码时发现了如下问题:
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仅可用于遍历输出数组,但不能用于修改数组。