Foreach ループでの反復変数の割り当て
Java では、foreach ループはコレクションを反復するための簡潔な構文を提供します。ただし、ループ内で反復変数を変更するときによくある誤解が生じます。次のコードを考えてみましょう:
String boss = "boss"; char[] array = boss.toCharArray(); for(char c : array) { if (c == 'o') c = 'a'; } System.out.println(new String(array)); // Prints "boss"
なぜこのコードは、予期される "bass" ではなく "boss" を出力するのですか?
この動作を理解するには、foreach ループが次のように動作することを認識することが重要です。要素自体ではなく、コレクション要素のコピーです。反復変数 (この場合は c) は、配列内の現在の要素のローカル コピーにすぎません。 c を変更しても、配列内の元の文字は変更されません。
配列要素を変更するには、次のようにインデックスを介して要素に明示的にアクセスする必要があります。
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
このコードは、文字を配列要素に直接変更すると、目的の出力「bass」が得られます。
要約すると、foreach ループを使用する場合は、反復変数がコレクション要素のローカル コピーを表します。基礎となるデータを変更するには、インデックスを介して要素に明示的にアクセスし、配列に対して直接変更を実行します。
以上がJava の For-Each ループで反復変数を変更しても元の配列が変更されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。