为何Java增强for循环无法为数组赋值?
为什么Java增强for循环无法给数组赋值?
问题出在增强for循环的工作机制上:当你用for(int ele: marks)遍历数组时,循环变量ele是数组对应位置元素的值副本,不是指向原数组元素的引用。
也就是说,每次循环时,JVM会把marks[i]的当前值复制到ele这个临时变量里。你执行ele = sc.nextInt(),只是修改了这个临时变量的值,完全没有触及原数组中的元素。循环结束后,原数组的元素依然保持初始化时的默认值0。
正确的写法
要修改数组元素,必须通过索引直接访问数组,用普通for循环实现:
import java.util.Scanner; public class JavaArrays { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int marks[] = new int[3]; // 通过索引操作原数组元素 for(int i = 0; i < marks.length; i++){ marks[i] = sc.nextInt(); } for (int ele : marks){ System.out.print(ele+" "); } } }
补充说明
如果是引用类型数组(比如String[]、自定义类数组),增强for循环的ele是对象引用的副本:
- 你可以通过
ele修改对象的内部属性(因为引用指向同一个对象); - 但如果直接给
ele赋值新对象,同样不会改变原数组里的引用(因为修改的是副本引用)。
而对于int这类基本数据类型数组,因为是值传递的副本,所以增强for循环里的赋值操作对原数组完全无效。
内容的提问来源于stack exchange,提问作者sarthak sharma
相关产品推荐
相关产品推荐

