Java中使用for-each循环接收数组元素语法是否可行?为何打印出垃圾值
语法合法性判断
该代码语法完全合法,可以正常通过编译,但逻辑存在根本性错误,无法实现给数组所有元素赋值输入的需求。
问题根因
- Java的增强for循环(for-each)遍历数组时,拿到的循环变量是数组当前元素的值的副本,既不是数组的下标索引,也不是数组元素的引用。
- 你代码中
for(int i:arr)里的i,每次循环都会被赋值为arr数组当前位置已经存储的数值,而非当前位置的下标。 - 新创建的int数组默认初始值全为0,因此你所有的输入值都会被重复赋值到
arr[0],数组其余位置的元素始终未被修改,保留初始值;如果你输入的数值超过数组的最大下标,还会触发ArrayIndexOutOfBoundsException数组越界异常。你打印时看到的“垃圾值”就是数组其余位置未被修改的初始值,或是越界访问导致的异常输出。
正确实现方案
给数组元素赋值需要通过下标操作,必须使用普通for循环:
for(int i = 0; i < arr.length; i++) { arr[i] = sc.nextInt(); }
内容的提问来源于stack exchange,提问作者Sayak Sarkar
相关产品推荐
相关产品推荐

