如何解决Java中增强for循环执行结果与预期不符的问题
问题核心原因
增强for循环和普通for循环的元素取值时机完全不同,这是导致输出差异的根本原因。
增强for循环的执行逻辑拆解
你写的第一段代码执行步骤如下:
int[] a = new int[5]执行后,int类型数组的默认初始值全为0,此时数组所有元素都是0。- 增强for循环遍历数组时,每一轮循环的临时变量
d的取值,是在进入循环体之前就完成的,和循环体内部的数组修改操作无关:- 第一轮循环:先取出索引0位置的元素赋值给
d,此时d=0,再执行循环体里的Arrays.fill(a, 111)把数组所有元素改成111,最后打印d,输出第一个字符0。 - 第二轮到第五轮循环:进入循环体前,数组已经被修改为全111,所以每次取出的
d都是111,执行循环体的fill操作不会改变结果,每次打印111,四轮总共输出12个1。
- 第一轮循环:先取出索引0位置的元素赋值给
- 最终拼接结果就是你看到的
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
相关产品推荐
相关产品推荐

