You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:09:53