反復変数の割り当てが失敗する理由
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", not "bass"
ループ内で 'o' が 'a' に変更されたように見えるにもかかわらず、予期せぬことに、出力は "boss" のままです。この動作は、foreach ループの性質に由来します。
foreach を使用する場合、反復変数は配列要素のコピーになります。反復変数に代入すると、コピーのみが変更され、配列要素自体は変更されません。基になる配列を更新するには、明示的な変更が必要です。
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
この改訂されたコードは、実際の配列要素に代入し、意図した 'o' から 'a' への変更を保証します。
In要約すると、foreach ループはコレクションの反復に便利ですが、反復変数への代入はローカル コピーにのみ影響します。永続的な変更には、明示的な配列インデックス付けが必要です。
以上がJava For-Each ループで反復変数に代入しても元の配列が変更されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。