一尘不染

Java 为什么foreach语句不更改元素值?

java

下面的印刷品为什么是老板而不是低音?

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

for(char c : array)
{
 if (c== 'o')
     c = 'a'; 
}
System.out.println(new String(array)); //How come this does NOT print out bass?It prints boss.

阅读 583

收藏
2020-02-27

共1个答案

一尘不染

你正在更改迭代变量c。那不会改变数组的内容。迭代变量只是数组元素的副本。如果要修改数组,则需要显式修改:

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

你的原始代码等效于(按照JLS的14.14.2节):

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

更改局部变量的值将永远不会更改任何其他内容,它只会更改局部变量。那作业:

char c = array[i];

将数组中的值复制到局部变量中。它不会将本地变量与数组元素永久关联。

2020-02-27