下面的印刷品为什么是老板而不是低音?
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。那不会改变数组的内容。迭代变量只是数组元素的副本。如果要修改数组,则需要显式修改:
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];
将数组中的值复制到局部变量中。它不会将本地变量与数组元素永久关联。