You need to enable JavaScript to run this app. 如何解决Java中增强for循环执行结果与预期不符的问题
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Java中增强for循环执行结果与预期不符的问题

问题核心原因

增强for循环和普通for循环的元素取值时机完全不同,这是导致输出差异的根本原因。


增强for循环的执行逻辑拆解

你写的第一段代码执行步骤如下:

  1. int[] a = new int[5] 执行后,int类型数组的默认初始值全为0,此时数组所有元素都是0。
  2. 增强for循环遍历数组时,每一轮循环的临时变量d的取值,是在进入循环体之前就完成的,和循环体内部的数组修改操作无关:
    • 第一轮循环:先取出索引0位置的元素赋值给d,此时d=0,再执行循环体里的Arrays.fill(a, 111)把数组所有元素改成111,最后打印d,输出第一个字符0。
    • 第二轮到第五轮循环:进入循环体前,数组已经被修改为全111,所以每次取出的d都是111,执行循环体的fill操作不会改变结果,每次打印111,四轮总共输出12个1。
  3. 最终拼接结果就是你看到的011111111111。

普通for循环逻辑差异

普通for循环没有提前取值的操作,每次循环都是先执行Arrays.fill(a, 111)修改数组,再直接读取当前索引的数组元素打印,所以所有位置读取到的都是修改后的111,符合你的预期。


修复方案

如果要让增强for循环输出符合预期,只需要把Arrays.fill(a, 111)放到循环外面,遍历前就完成数组赋值即可:

int[] a = new int[5] ;
Arrays.fill(a, 111);
for(int d:a) {
  System.out.print(d);
}

内容的提问来源于stack exchange,提问作者Pooja Mangal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:06:10