Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 如何是';每个';循环构造是否适用于阵列?_Java_Arrays_Foreach - Fatal编程技术网

Java 如何是';每个';循环构造是否适用于阵列?

Java 如何是';每个';循环构造是否适用于阵列?,java,arrays,foreach,Java,Arrays,Foreach,考虑下面的简单代码 String[] strArray = new String[10]; for(String s : strArray) { System.out.println(s); } 据我所知,对于每个构造,比如for(String s:strArray)在内部使用迭代器对元素进行迭代。在数组上迭代时也是这样吗 如果是,那么为什么我们不能做以下工作 Iterable<String> strIterator = strArray.i

考虑下面的简单代码

    String[] strArray = new String[10];
    for(String s : strArray) {
        System.out.println(s);
    }
据我所知,对于每个构造,比如
for(String s:strArray)
在内部使用迭代器对元素进行迭代。在数组上迭代时也是这样吗

如果是,那么为什么我们不能做以下工作

Iterable<String> strIterator = strArray.iterator();//illegal
Iterable striiterator=strArray.iterator()//非法的
据我所知,对于像for(String s:strArray)这样的每个构造,在内部使用迭代器对元素进行迭代

当strArray是一个iterable时,它会这样做——它只是对数组的工作方式有所不同

所有细节都在里面。特别是:

否则,表达式必须具有数组类型,
T[]

L1
Lm
是紧靠增强型for语句前面的标签序列(可能为空)

增强型for语句相当于以下形式的基本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
是自动生成的标识符,与增强for语句出现点范围内的任何其他标识符(自动生成或其他)不同

TargetType是循环变量的类型,由FormalParameter中出现的类型表示,后跟FormalParameter中标识符后面的任何括号对(§10.2)


换句话说,当你在一个数组上迭代时,它只使用
长度
字段,就好像你是手工写出来的一样。

它只在所有数组上使用forloop,但在所有iterable上使用迭代器

这是一个方便的JLS怪癖