Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why I can iterate on array in forEach loop in Java?

Tags:

java

iterator

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);
}
like image 722
Aaron Avatar asked Jul 22 '26 01:07

Aaron


2 Answers

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
}

#a and #i are 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).

like image 189
Makoto Avatar answered Jul 24 '26 16:07

Makoto


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 Iterable or an array type

like image 34
Elliott Frisch Avatar answered Jul 24 '26 17:07

Elliott Frisch



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!