Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我可以在Java中的forEach循环中迭代数组?_Java_Iterator - Fatal编程技术网

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

为什么我可以在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,我就不能用forEach迭代该结构。但为什么我可以在Java中迭代数组呢?数组不可
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,编译器将生成一种字节码,如果参数是数组,编译器将生成另一种字节码。