検討してみてください。
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
for each*構文を使わない場合、同等のfor
ループはどのようになるでしょうか。
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
ループの中で i.remove();
を使う必要がある場合や、何らかの方法で実際のイテレータにアクセスする必要がある場合、実際のイテレータは単に推論されるだけなので、for ( : )
イディオムは使えないことに注意してください。
Denis Bueno氏が指摘したように、このコードはIterable
インターフェイスを実装しているあらゆるオブジェクトで動作します。
また,for (:)
イディオムの右辺がIterable
オブジェクトではなくarray
である場合,内部コードはint型のインデックスカウンタを使用し,代わりにarray.length
に対してチェックを行います.Java Language Specification]2を参照してください。