Java for-each循环如何防止空列表?

Java for-each循环如何防止空列表?,java,for-loop,foreach,Java,For Loop,Foreach,我继续读下去。对于每个等效的 for (int i = 0; i < arr.length; i++) { type var = arr[i]; body-of-loop } 我的问题是,对于空列表,for-each循环是如何工作的。我知道对于常规的for循环,arr.length将只计算为0,循环不会执行。每个循环的循环时间是多少 我的问题是,对于空列表,for-each循环如何工作 ForEach也以同样的方式工作。如果长度为零,则永远不会执行循环 它们之间的

我继续读下去。对于每个等效的

for (int i = 0; i < arr.length; i++) { 
     type var = arr[i];
      body-of-loop
}
我的问题是,对于空列表,for-each循环是如何工作的。我知道对于常规的for循环,arr.length将只计算为0,循环不会执行。每个循环的循环时间是多少

我的问题是,对于空列表,for-each循环如何工作

ForEach
也以同样的方式工作。如果长度为零,则永远不会执行循环

它们之间的唯一区别是,当您要迭代列表或数组的所有项时,使用
ForEach
循环,而在正常
for
循环的情况下,您可以控制开始和结束索引。

是,这是等效的


如果列表为空,则for each cycle不会执行一次。

它使用Iterable集合的迭代器,例如list。迭代器的实现者有责任编写hasnext()方法,如果没有下一项,则返回false,如果集合为空,则返回false,正如@user3810043在其回答注释中所暗示的那样,增强的
for
语句的计算方法与等效的
for
语句的基本
相同:

14.14.2. 增强型for语句

表达式的类型必须是原始类型Iterable或数组类型(§10.1)的子类型,否则会发生编译时错误。

否则,表达式必须具有数组类型T[]

让L1。。。Lm是标签的(可能为空)序列 在增强型for语句之前

增强的for语句相当于的basic for语句 表格:

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];
陈述
}
#a和#i是自动生成的标识符,与在增强for语句出现点的范围内的任何其他标识符(自动生成或其他)不同


^引用

但问题是关于数组,而不是集合。我喜欢这个,但你能在java文档中澄清一下吗,它说迭代器迭代集合吗?简而言之,在语言规范第14.14.2节中,如果集合(小c)是一个数组,然后编译器使用int计数器将代码转换为标准for循环,如果集合(小c)是一个Iterable(包括集合类),则它调用迭代器注意,你不必重复整个内容。它如何回答这个问题?OP知道问题中的两个代码示例是等效的,并询问foreach循环如何对空数组工作,而不是它是否工作。@Eran-第二句话回答了问题,对于空列表,它没有执行(这意味着,它工作,也没有执行,你不能再多说了)。
T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
    {VariableModifier} TargetType Identifier = #a[#i];
    Statement
}