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循环。