For-Each ループで反復変数を変更しても基礎となるデータが変更されない理由
Java では、拡張された for-Each ループは、配列またはコレクションを反復処理するための便利な構文です。ただし、ループ内の基になるデータを変更しようとすると、よくある誤解が生じます。
次のコード スニペットを考えてみましょう。
String boss = "boss"; char[] array = boss.toCharArray(); for(char c : array) { if (c== 'o') c = 'a'; } System.out.println(new String(array)); //Outputs "boss"
if-else ブロックが、出現するすべてのデータを置き換えようとしているにもかかわらず、 'o' を 'a' にすると、結果は "boss" のままになります。なぜこれが当てはまるのでしょうか?
この動作を理解する鍵は、for-each ループの反復変数の性質にあります。 for-each 構文を使用して配列を反復処理する場合、反復変数 (この場合は c) は、現在のインデックスにある配列要素のコピーにすぎません。反復変数に加えられた変更は、元の配列には反映されません。
基礎となるデータを変更するには、配列要素自体に明示的にアクセスして変更する必要があります。これは、標準の for ループ構文を使用して実現できます。
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
この改訂されたコードでは、反復変数 i は配列内の現在のインデックスを追跡し、array[i] はその位置にある実際の要素にアクセスします。索引。 array[i] に直接代入すると、配列の内容が変更されます。
したがって、for-each ループ構文を使用して配列またはコレクションを操作する場合、反復変数だけを変更しても変更は行われないことに留意することが重要です。基礎となるデータを変更します。データに永続的な変更を加えるには、標準のループ構文またはその他の適切な方法を使用して、コレクション内の要素に明示的にアクセスして変更する必要があります。
以上がFor-Each ループの反復変数を変更しても Java の基礎となる配列が変更されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。