首页 >Java >java教程 >为什么修改 Java For-Each 循环中的字符不会更改原始数组?

为什么修改 Java For-Each 循环中的字符不会更改原始数组?

Susan Sarandon
Susan Sarandon原创
2024-12-21 11:54:14838浏览

Why Doesn't Modifying a Character in a Java For-Each Loop Change the Original Array?

深入研究迭代困境:为什么 Foreach 循环分配不会改变底层数据

尽管直接修改元素中的元素具有直观的吸引力foreach 循环,如以下 Java 代码片段所示:

String boss = "boss";
char[] array = boss.toCharArray();

for(char c : array)
{
 if (c== 'o')
     c = 'a'; 
}
System.out.println(new String(array)); //Unexpected result: "boss"

代码令人惊讶的是产生“boss”而不是预期的“bass”。

揭开副本

理解这个悖论的关键在于迭代变量“c”的本质”。与流行的看法相反,“c”仅代表手头数组元素的副本。修改“c”与原始数组内容无关。

数组修改揭秘

要真正改变数组,需要显式干预:

for (int i = 0; i < array.length; i++) {
    if (array[i] == 'o') {
        array[i] = 'a';
    }
}

这里,代码访问并修改实际的数组元素,导致数组被更新以反映所需的

理解 JLS 解释

Java 语言规范 (JLS) 将原始代码解释为等效于:

for (int i = 0; i < array.length; i++) {
    char c = array[i];
    if (c == 'o') {
        c = 'a'; 
    }
}

这种分解强调“c”只是一个不能影响数组的副本。

本质上,foreach 循环提供一种简化的方法来迭代集合而不干扰其底层结构。直接数组修改需要显式地使用数组索引和元素。

以上是为什么修改 Java For-Each 循环中的字符不会更改原始数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn