Foreach 循环中的迭代变量赋值
在 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"
为什么此代码打印“boss”而不是预期的“bass”?
要理解此行为,认识到 foreach 循环的操作至关重要集合元素的副本,而不是元素本身。迭代变量(在本例中为 c)只是数组中当前元素的本地副本。修改 c 不会修改数组中的原始字符。
要修改数组元素,必须通过索引显式访问元素,如下所示:
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
此代码分配直接将修改字符修改为数组元素,从而得到所需的“bass”输出。
总之,在使用 foreach 循环时,请记住迭代变量表示局部变量集合元素的副本。要修改底层数据,请通过其索引显式访问元素并直接在数组上执行修改。
以上是为什么修改 Java For-Each 循环中的迭代变量不会更改原始数组?的详细内容。更多信息请关注PHP中文网其他相关文章!