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怪癖