首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么for-each循环适用于数组?(Java)

为什么for-each循环适用于数组?(Java)
EN

Stack Overflow用户
提问于 2020-06-16 13:18:12
回答 2查看 228关注 0票数 3

我不明白在Java中for each循环是如何迭代数组的。我的理解是for each循环可以遍历任何实现Iterable接口的类,但是Java中的数组并不实现Iterable,那么怎么可能在它们上使用for each循环呢?

EN

回答 2

Stack Overflow用户

发布于 2020-06-16 13:27:14

如果for (:)习惯用法的右侧是array而不是Iterable对象,则内部代码使用int索引计数器并检查array.length。这就是为什么它可以用来遍历数组。有关更多详细信息,请参阅Java Language Specification

这个答案的一部分是不受here约束的。你也可以看看这个问题。

我想补充的是,如果你愿意,你可以很容易地将java array转换成Iterable

代码语言:javascript
代码运行次数:0
运行
复制
Integer arr[] = { 1, 2, 3, 4, 5};

List<Integer> list = Arrays.asList(arr);
// or
Iterable<Integer> iterable = Arrays.asList(arr);
票数 4
EN

Stack Overflow用户

发布于 2020-06-16 13:46:56

根据JLS

增强的for语句具有以下形式:

表达式: for ( {VariableModifier} UnannType VariableDeclaratorId :EnhancedForStatement)语句

表达式: for ( {VariableModifier} UnannType VariableDeclaratorId :VariableDeclaratorId) StatementNoShortIf

Java foreach循环或增强的for语句被转换为基本的for语句,如下所示:

  1. 如果对于某个类型参数X,Expression的类型是Iterable<X>的子类型,则让Ijava.util.Iterator<X>;类型,否则,让I为原始类型I

增强的for语句等同于以下形式的基本for语句:

代码语言:javascript
代码运行次数:0
运行
复制
for (I #i = Expression.iterator(); #i.hasNext(); ) {
    {VariableModifier} TargetType Identifier =
        (TargetType) #i.next();
    Statement
}

否则,T[].必须具有数组类型

增强的for语句等同于以下形式的基本for语句:

代码语言:javascript
代码运行次数:0
运行
复制
T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
    {VariableModifier} TargetType Identifier = #a[#i];
    Statement
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62401388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档