Java 为什么foreach语句不更改元素值?
为什么下面的照片是boss而不是bassJava 为什么foreach语句不更改元素值?,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会发生更改,但数组内容不会发生更改。要
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++)
{
char c = array[i];
if (c== 'o')
array[i] = 'a';
}
for(int i=0;i
您正在更改迭代变量c
。这不会更改数组的内容。迭代变量只是数组元素的一个副本。如果要修改数组,则需要显式修改:
for (int i = 0; i < array.length; i++) {
if (array[i] == 'o') {
array[i] = 'a';
}
}
将数组中的值复制到局部变量中。它不会永久地将局部变量与数组元素相关联。这是因为
c='a'
将a
赋值给局部变量c
,而该局部变量不引用数组本身索引处的实际值。它只包含数组的指定索引中存在的值的副本。因此,更改实际上是在局部变量中进行的,而不是在array[i]
引用的实际位置。。
如果要更改值,应使用以下命令:
int i = 0;
for(char c : array)
{
if (c== 'o')
array[i] = 'a';
i++;
}
c的值是数组中值的副本。直接访问数组以更改有问题的值。在“for each”循环中应用的更改仅在她的体内进行(这是因为值是复制的,而不是引用)。要处理引用,请使用“for”循环。将“a”赋值给局部变量c,而不是数组元素。要让它打印低音,你需要
for (int i = 0; i < array.length; i++) {
if (array[i] == 'o') {
array[i] = 'a';
}
}
for(int i=0;i
哦,好的,谢谢。我不明白c只是一个副本。谢谢,现在这很有意义了。@BaroudiSafwen:数组元素的副本在每次迭代中都会制作出来。你说的“变形”是什么意思?我很不明白你在说什么。@KacyRaye顺便说一句,在对象引用类上使用增强的for
循环时,这是一种类似的行为(这里提出的解决方案是相同的)。在这一点上,使用普通的for循环不是更好吗?
int i = 0;
for(char c : array)
{
if (c== 'o')
array[i] = 'a';
i++;
}
for (int i = 0; i < array.length; i++) {
if (array[i] == 'o') {
array[i] = 'a';
}
}