据我所知,像 for(String s : strArray) 这样的 for-each 结构在内部使用一个迭代器来迭代元素。
好吧,它何时strArray是可迭代的 - 它对数组的工作方式不同。
所有详细信息都在JLS 的第 14.14.2 节中。尤其是:
否则,表达式必须具有数组类型,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
}
#a和 #i是自动生成的标识符,与增强 for 语句发生时范围内的任何其他标识符(自动生成或以其他方式)不同。
TargetType 是循环变量的类型,由出现在 FormalParameter 中的 Type 表示,后跟 FormalParameter 中标识符后面的任何括号对(第 10.2 节)。
换句话说 - 当您遍历一个数组时,它只是使用该length字段,就好像您手动编写它一样。