为什么迭代变量赋值失败
在 Java 的 foreach 循环中,一个常见的误解是对迭代变量进行赋值会修改底层数据。考虑以下代码:
String boss = "boss"; char[] array = boss.toCharArray(); for (char c : array) { if (c == 'o') { c = 'a'; } } System.out.println(new String(array)); // Prints "boss", not "bass"
出乎意料的是,尽管循环中的“o”明显变为“a”,但输出仍然是“boss”。这种行为源于 foreach 循环的本质。
使用 foreach 时,迭代变量是数组元素的副本。分配给迭代变量仅修改副本,而不修改数组元素本身。要更新底层数组,需要显式修改:
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
此修改后的代码分配给实际的数组元素,确保将 'o' 修改为 'a'。
In总之,foreach 循环为迭代集合提供了便利,但对迭代变量的赋值仅影响本地副本。对于持久修改,需要显式数组索引。
以上是为什么在 Java For-Each 循环中分配给迭代变量不会更改原始数组?的详细内容。更多信息请关注PHP中文网其他相关文章!