为什么我可以在Java中的forEach循环中迭代数组?
通常的想法是,如果某个结构不可Iterable,我就不能用forEach迭代该结构。但为什么我可以在Java中迭代数组呢?数组不可为什么我可以在Java中的forEach循环中迭代数组?,java,iterator,Java,Iterator,通常的想法是,如果某个结构不可Iterable,我就不能用forEach迭代该结构。但为什么我可以在Java中迭代数组呢?数组不可Iterable MyClass[] array = {new MyClass("a"), new MyClass("b")}; for (MyClass c : array) { System.out.println(c); } 原因是,这是一个错误。虽然它可能以不同的方式表示这两个对象,但迭代的顺序是相同的——并且效果对您来说是透明的 …否则,表达式必
Iterable
MyClass[] array = {new MyClass("a"), new MyClass("b")};
for (MyClass c : array) {
System.out.println(c);
}
原因是,这是一个错误。虽然它可能以不同的方式表示这两个对象,但迭代的顺序是相同的——并且效果对您来说是透明的
…否则,表达式必须具有数组类型,T[]
让L1。。。Lm是标签的(可能为空)序列
在增强型for语句之前
增强的for语句相当于的basic for语句
表格:
T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
VariableModifiersopt TargetType Identifier = #a[#i];
Statement
}
T[]#a=表达式;
L1:L2:。。。Lm:
for(int#i=0;#i<#a.length;#i++){
VariableModifiersopt TargetType标识符=#a[#i];
陈述
}
#a
和#i
是自动生成的标识符,它们是
不同于任何其他标识符(自动生成或
否则)在增强的
语句发生
TargetType是由类型表示的循环变量的类型
出现在FormalParameter中的,后跟
遵循格式参数中的标识符(§10.2)
原因是Java有一种内置的方式来处理for-each循环中的数组。检查一下这个在部分中说,for-each构造也适用于数组 报告(部分)说 表达式的类型必须是
Iterable
或数组类型
您可以在数组上迭代,因为rangefor构造同时适用于Iterables和数组。如果参数是Iterable,编译器将生成一种字节码,如果参数是数组,编译器将生成另一种字节码。