Java增强型for循环

Java中增强型for循环为什么不可以用于数组的输入?

增强型for只能用于出去数组中的元素,并赋值给变量之中。

由于之前定义数组时,没给元素赋值,所有元素默认为0 所以此方法不成立。

在增强型for循环中元素是一个包含引用(或值)的局部变量在基元的情况下)到数组的当前元素。分配给它不会影响数组

比如下面的编译后

 
        int[] a = new int[5];
        for(int n:a){
            n = (int)(Math.random()*100);
        }

等价于

 
     int[] a = new int[5];
     int len = a.length;
     for (int i = 0; i < len; i++) {
	   int n = a[i];
	   n = (int) (Math.random() * 100);
     }

所以,你操作的其实是临时变量n,而不是a[i] 在jvm中,n其实对应的是栈上的一个引用槽,你下面的

 n = (int) (Math.random() * 100);

是对这个引用槽进行的操作,所以无法反馈到a[i]上。

在增强型for循环中元素是一个包含引用(或值)的局部变量在基元的情况下)到数组的当前元素或 Iterable 你正在迭代。

分配给它不会影响数组/ Iterable 。
它相当于:
int [] array = new int [5]; for(int i = 0; i< 5; i ++){ int element = array [i]; 元素= 10; }

这也不会修改数组。
如果你需要修改数组,请使用常规for循环。