詳細には、Java で 'for each' ループはどのように機能しますか? 質問する

詳細には、Java で 'for each' ループはどのように機能しますか? 質問する

考慮する:

List<String> someList = new ArrayList<>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
    System.out.println(item);
}

for eachfor構文を使用しない場合、同等のループはどのようになるでしょうか?


Java初心者は、新しいスタイルのforeachループを使用して元のデータを変更しようとすると、よく問題に遭遇します。foreach ループ内の反復変数に割り当てても、基になるデータが変更されないのはなぜですか?共通の問題についての重複を解消します。類似の構造を持つ他の言語でも、一般的に同じ問題が発生することに注意してください。たとえば、反復変数を変更しても後続の反復には影響しないのはなぜですか?Python でも同じ問題が発生します。

ベストアンサー1

for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
    String item = i.next();
    System.out.println(item);
}

i.remove();ループ内で を使用する必要がある場合、または何らかの方法で実際の反復子にアクセスする必要がある場合、for ( : )実際の反復子は単に推測されるだけなので、この慣用句は使用できないことに注意してください。

Denis Buenoが指摘したように、このコードは、Iterableインターフェース

イディオムの右側がfor (:)オブジェクトではなく配列である場合Iterable、内部コードは代わりにintインデックスカウンタを使用してチェックしますarray.lengthJava言語仕様

for (int i = 0; i < someArray.length; i++) {
    String item = someArray[i];
    System.out.println(item);
}

おすすめ記事