Java 为什么for each循环适用于阵列?(爪哇)

Java 为什么for each循环适用于阵列?(爪哇),java,arrays,foreach,iterable,Java,Arrays,Foreach,Iterable,我不明白for-each循环如何在Java中迭代数组。我的理解是for-each循环可以迭代实现Iterable接口的任何类,但是Java中的数组不实现Iterable,那么怎么可能在它们上使用for-each循环呢?如果(:)习惯用法的右侧是数组而不是Iterable对象,内部代码使用int索引计数器并检查array.length。这就是为什么它可以用来循环数组。有关更多详细信息,请参阅 这个答案的一部分被豁免了。你也可以看看这个问题 我想补充一点,如果您愿意,您可以轻松地将javaarray

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

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

这个答案的一部分被豁免了。你也可以看看这个问题

我想补充一点,如果您愿意,您可以轻松地将java
array
转换为
Iterable

Integer arr[] = { 1, 2, 3, 4, 5};

List<Integer> list = Arrays.asList(arr);
// or
Iterable<Integer> iterable = Arrays.asList(arr);
整数arr[]={1,2,3,4,5};
List=Arrays.asList(arr);
//或
Iterable Iterable=Arrays.asList(arr);
根据:

增强型for语句的形式如下:

for (I #i = Expression.iterator(); #i.hasNext(); ) {
    {VariableModifier} TargetType Identifier =
        (TargetType) #i.next();
    Statement
}
T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
    {VariableModifier} TargetType Identifier = #a[#i];
    Statement
}
EnhancedForStatement:for({VariableModifier}unantype VariableDeclaratorId:Expression)语句

EnhancedForStatementNoShortIf:for({VariableModifier}unantype VariableDeclaratorId:Expression)语句NOSHORTIF

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

  • 如果对于某些类型参数X,
    Expression
    的类型是
    Iterable
    的子类型,那么让
    I
    成为类型
    java.util.Iterator
    否则,让
    I
    成为原始类型
    java.util.迭代器。
  • 增强型for语句相当于以下形式的基本for语句:

    for (I #i = Expression.iterator(); #i.hasNext(); ) {
        {VariableModifier} TargetType Identifier =
            (TargetType) #i.next();
        Statement
    }
    
    T[] #a = Expression;
    L1: L2: ... Lm:
    for (int #i = 0; #i < #a.length; #i++) {
        {VariableModifier} TargetType Identifier = #a[#i];
        Statement
    }
    
  • 否则,
    表达式必须具有数组类型,
    T[]
  • 增强型for语句相当于以下形式的基本for语句:

    for (I #i = Expression.iterator(); #i.hasNext(); ) {
        {VariableModifier} TargetType Identifier =
            (TargetType) #i.next();
        Statement
    }
    
    T[] #a = Expression;
    L1: L2: ... Lm:
    for (int #i = 0; #i < #a.length; #i++) {
        {VariableModifier} TargetType Identifier = #a[#i];
        Statement
    }
    
    T[]#a=表达式;
    L1:L2:。。。Lm:
    for(int#i=0;#i<#a.length;#i++){
    {VariableModifier}TargetType标识符=#a[#i];
    陈述
    }
    
    是否有任何来源可以描述他们为什么决定这样做?特别是为什么他们决定数组不能实现Iterable?我可以想一些原因,但我很好奇……你只是把别人的答案复制粘贴为你自己的。相反,标记为重复。你甚至都没试着改写它-感谢你的话@VinceEmigh。我没有将它标记为重复,因为问题不同。我只是选了一个对他有意义的角色。另外,我提到了实际的链接。我认为我没有做任何违背社区政策的事情#Peace@tquadrat赫拉:有一些很好的答案可能会给你一些启发。您知道数组之外是否有任何数据结构可以在每个循环中使用,而无需实现iterable?