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

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

Barbara Streisand
リリース: 2024-12-26 12:11:13
オリジナル
763 人が閲覧しました

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

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

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