如果这个结构不可以迭代,我不能用forEach迭代一些结构。但为什么我可以在Java中迭代数组呢?数组不是Iterable
。
MyClass[] array = {new MyClass("a"), new MyClass("b")};
for (MyClass c : array) {
System.out.println(c);
}
答案 0 :(得分:9)
原因是language has made an allowance为它。虽然它可能以不同的方式表示两个对象,但迭代的顺序是相同的 - 并且效果对您来说是透明的。
...否则,Expression必须具有数组类型
T[]
。设L 1 ...... L m 立即为(可能为空)标签序列 在增强的for语句之前。
增强的for语句相当于一个基本的for语句 形式:
T[] #a = Expression; L1: L2: ... Lm: for (int #i = 0; #i < #a.length; #i++) { VariableModifiersopt TargetType Identifier = #a[#i]; Statement }
#a
和#i
是自动生成的标识符 与任何其他标识符不同(自动生成或 否则)在增强的范围内 声明发生。TargetType是循环变量的类型,由Type表示 出现在FormalParameter中,后跟任何括号对 按照FormalParameter中的标识符(§10.2)。
答案 1 :(得分:1)
原因是因为Java有一个内置的方法来处理每个循环中的数组。看看这个link
答案 2 :(得分:1)
The For-Each
Documentation在部分中说for for-each构造也适用于数组。
JLS-14.4.2 The enhanced for
statement说(部分),
表达式的类型必须是
Iterable
或数组类型