ホームページ > Java > &#&チュートリアル > Java For-Each ループで反復変数に代入しても元の配列が変更されないのはなぜですか?

Java For-Each ループで反復変数に代入しても元の配列が変更されないのはなぜですか?

Susan Sarandon
リリース: 2024-12-29 08:59:10
オリジナル
977 人が閲覧しました

Why Doesn't Assigning to the Iteration Variable Change the Original Array in a Java For-Each Loop?

反復変数の割り当てが失敗する理由

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート