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

Aar*_*ron 2 java iterator

通常的想法是,如果这个结构不是Iterable,我就不能用forEach迭代一些结构.但为什么我可以在Java中迭代数组呢?数组不是Iterable.

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

for (MyClass c : array) {
    System.out.println(c);
}
Run Code Online (Sandbox Code Playgroud)

Mak*_*oto 9

原因是该语言已经允许它.虽然它可能以不同的方式表示两个对象,但迭代的顺序是相同的 - 并且效果对您来说是透明的.

...否则,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
}
Run Code Online (Sandbox Code Playgroud)

#a并且#i是自动生成的标识符,这些标识符与发生增强的for语句的范围内的任何其他标识符(自动生成的或其他标识符)不同.

TargetType是循环变量的类型,由FormalParameter中出现的Type表示,后跟FormalParameter(第10.2节)中Identifier之后的任何括号对.