为什么我可以在Java中的forEach循环中迭代数组?

时间:2014-12-02 18:48:07

标签: java iterator

如果这个结构不可以迭代,我不能用forEach迭代一些结构。但为什么我可以在Java中迭代数组呢?数组不是Iterable

MyClass[] array = {new MyClass("a"), new MyClass("b")};

for (MyClass c : array) {
    System.out.println(c);
}

3 个答案:

答案 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或数组类型