java - 为什么在 foreach 循环中分配给迭代变量不会更改基础数据?

标签 java foreach

为什么下面打印的是boss而不是bass?

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.

最佳答案

您正在更改迭代变量c。这不会改变数组的内容。迭代变量只是数组元素的副本。如果你想修改数组,你需要明确地这样做:

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

您的原始代码相当于(根据 section 14.14.2 of the JLS ):

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

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

char c = array[i];

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

关于java - 为什么在 foreach 循环中分配给迭代变量不会更改基础数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56581406/

相关文章:

java - 在 Swing 中使用角度绘制圆弧

java - 休息Web服务中的Spring Security

java - 添加 Java 异常断点在 Eclipse 中不显示任何匹配项

java - @Valid (jsr 303) 在 Spring mvc 3.0 中不起作用

java - Apache Commons Daemon procrun 访问在 Windows 7 上被拒绝

php - 查询不起作用

php - 如果 foreach 循环中的值不相等,则尝试执行某些操作,但未获得预期结果

Java为每个循环访问索引

php - 多个项目 : Dynamic Item Name and Number in PayPal Form with PHP

php - 如何: remove object from array that has certain property value and crete new array as result