考虑一下。
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 (:) "习惯法的右侧是一个 "array "而不是一个 "Iterable "对象,内部代码会使用一个int索引计数器并检查 "array.length "来代替。见Java语言规范。