我不明白在Java中for each循环是如何迭代数组的。我的理解是for each循环可以遍历任何实现Iterable接口的类,但是Java中的数组并不实现Iterable,那么怎么可能在它们上使用for each循环呢?
发布于 2020-06-16 05:27:14
如果for (:)
习惯用法的右侧是array
而不是Iterable
对象,则内部代码使用int
索引计数器并检查array.length
。这就是为什么它可以用来遍历数组。有关更多详细信息,请参阅Java Language Specification。
这个答案的一部分是不受here约束的。你也可以看看这个问题。
我想补充的是,如果你愿意,你可以很容易地将java array
转换成Iterable
。
Integer arr[] = { 1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr);
// or
Iterable<Integer> iterable = Arrays.asList(arr);
发布于 2020-06-16 05:46:56
根据JLS
增强的for语句具有以下形式:
表达式: for ( {VariableModifier} UnannType VariableDeclaratorId :EnhancedForStatement)语句
表达式: for ( {VariableModifier} UnannType VariableDeclaratorId :VariableDeclaratorId) StatementNoShortIf
Java foreach循环或增强的for语句被转换为基本的for语句,如下所示:
Expression
的类型是Iterable<X>
的子类型,则让I
为java.util.Iterator<X>;
类型,否则,让I
为原始类型I
增强的for语句等同于以下形式的基本for语句:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
{VariableModifier} TargetType Identifier =
(TargetType) #i.next();
Statement
}
否则,T[]
.必须具有数组类型
增强的for语句等同于以下形式的基本for语句:
T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
{VariableModifier} TargetType Identifier = #a[#i];
Statement
}
https://stackoverflow.com/questions/62401388
复制相似问题