http://www.leepoint.net/notes-Java/flow/loops/foreach.html を読みます。それぞれに相当する
for (int i = 0; i < arr.length; i++) {
type var = arr[i];
body-of-loop
}
は
for (type var : arr) {
body-of-loop
}
私の質問は、空のリストに対してfor eachループがどのように機能するかです。通常のforループの場合、arr.lengthは0と評価され、ループは実行されません。 for eachループについてはどうですか?
私の質問は、空のリストに対してfor eachループがどのように機能するかです
ForEach
も同様に機能します。長さがゼロの場合、ループは実行されません。
それらの唯一の違いは、リストまたは配列のすべての項目を繰り返したいときにForEach
ループを使用することです。一方、通常のfor
ループの場合、開始インデックスと終了インデックスを制御できます。
Iterableコレクションの反復子を使用します。リスト。コレクションが空の場合に該当する次のアイテムがない場合にfalseを返すhasnext()メソッドを記述することは、イテレータの実装者の義務です。
はい、同等です。
リストが空の場合、for-eachサイクルは一度も実行されません。
@ user3810043の回答コメントで言及しているように、拡張されたfor
ステートメントは、同等の基本的なfor
ステートメントと同じように文字通り評価されます。
14.14.2。強化されたforステートメント
...
Expressionの型は、Iterableのraw型のサブタイプまたは配列型(§10.1)である必要があります。そうでない場合、コンパイル時エラーが発生します。
...
それ以外の場合、Expressionには必ず配列型T []が含まれます。
L1 ... Lmを、拡張forステートメントの直前のラベルのシーケンス(空の場合もある)とします。
拡張forステートメントは、次の形式の基本forステートメントと同等です。
T[] #a = Expression; L1: L2: ... Lm: for (int #i = 0; #i < #a.length; #i++) { {VariableModifier} TargetType Identifier = #a[#i]; Statement }
#aおよび#iは、自動生成された識別子であり、拡張forステートメントが発生した時点でスコープ内にある他の識別子(自動生成された、またはその他)とは異なります。
^ Java®言語仕様 からの引用