61

次のプリントは、なぜベースではなく、ボスになるのでしょうか?

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.
4

6 に答える 6

9

これは、それ自体のそのインデックスに存在する実際の値を参照していないローカル変数にc = 'a'割り当てているためです。の指定されたインデックスに存在する値のコピーが含まれているだけです。したがって、変更は実際には、参照している実際の場所ではなく、ローカル変数で行われます。値を変更する場合は、実際に次を使用する必要があります。acarrayarrayarray[i]

int i = 0;
for(char c : array)
{
 if (c== 'o')
     array[i] = 'a'; 
  i++;
}
于 2013-04-05T22:11:14.163 に答える
4

c の値は、配列内の値のコピーです。問題の値を変更するには、配列に直接アクセスします。

于 2013-04-05T22:12:19.070 に答える
1

「for each」ループで適用される変更は、彼女の体のすぐ内側で行われます (これは、参照ではなく値がコピーされるためです)。参照を操作するには、'for' ループを使用します。

于 2013-04-05T22:12:22.670 に答える