猿问

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

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

为什么下面印的是老板而不是贝斯?

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.


守着星空守着你
浏览 732回答 3
3回答

炎炎设计

您正在更改迭代变量c..这不会改变数组的内容。迭代变量只是一个复制数组元素的。如果要修改数组,则需要显式地这样做:for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;array.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(array[i]&nbsp;==&nbsp;'o')&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[i]&nbsp;=&nbsp;'a'; &nbsp;&nbsp;&nbsp;&nbsp;}}您的原始代码是等效的(如第14.14.2节)至:for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;array.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;c&nbsp;=&nbsp;array[i]; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(c&nbsp;==&nbsp;'o')&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;'a';&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;}}更改局部变量的值将永远不会改变其他任何东西-它只是更改局部变量。任务:char&nbsp;c&nbsp;=&nbsp;array[i];复制件数组中的值放入局部变量中。它不会永远将局部变量与数组元素关联起来。

蛊毒传说

这是因为c = 'a'正在分配a到局部变量c对象的索引处的实际值。array本身。它只是包含在指定索引处的值的副本。array..因此,更改实际上是在局部变量中进行的,而不是在实际位置array[i]是指.。如果您想要更改值,则应该确实使用以下内容:int&nbsp;i&nbsp;=&nbsp;0;for(char&nbsp;c&nbsp;:&nbsp;array){ &nbsp;if&nbsp;(c==&nbsp;'o') &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[i]&nbsp;=&nbsp;'a';&nbsp; &nbsp;&nbsp;i++;}

九州编程

你变量c获取更改,但不更改数组内容。若要更改数组,请不要使用c直接操作数组。for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;array.length;&nbsp;i++){ &nbsp;char&nbsp;c&nbsp;=&nbsp;array[i]; &nbsp;if&nbsp;(c==&nbsp;'o') &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array[i]&nbsp;=&nbsp;'a';}
随时随地看视频慕课网APP

相关分类

Java
我要回答