It is common idea that I cannot iterate on some structure with forEach if this structure isn't Iterable. But why I can iterate on array in Java? Array isn't Iterable.
MyClass[] array = {new MyClass("a"), new MyClass("b")};
for (MyClass c : array) {
System.out.println(c);
}
The reason is that the language has made an allowance for it. While it may represent the two objects differently, the sequence of iteration is the same - and the effect is transparent to you.
...Otherwise, the Expression necessarily has an array type,
T[].Let L1 ... Lm be the (possibly empty) sequence of labels immediately preceding the enhanced for statement.
The enhanced for statement is equivalent to a basic for statement of the form:
T[] #a = Expression; L1: L2: ... Lm: for (int #i = 0; #i < #a.length; #i++) { VariableModifiersopt TargetType Identifier = #a[#i]; Statement }
#aand#iare automatically generated identifiers that are distinct from any other identifiers (automatically generated or otherwise) that are in scope at the point where the enhanced for statement occurs.TargetType is the type of the loop variable as denoted by the Type that appears in the FormalParameter followed by any bracket pairs that follow the Identifier in the FormalParameter (§10.2).
The For-Each Documentation says in part The for-each construct is also applicable to arrays.
The JLS-14.4.2 The enhanced for statement says (in part),
The type of the Expression must be
Iterableor an array type
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With