Java高级循环:循环中(未)计算的内容';s头球?

Java高级循环:循环中(未)计算的内容';s头球?,java,loops,Java,Loops,我有以下代码: for (Attribute thisAttribute : factor.getAttributes()) { // blabla } 其中factor.getAttributes()返回List 显然,只有一个对factor.getAttributes()的初始调用,然后遍历开始。然而,我不明白为什么只有一个电话。如果我在一个常规的for()循环的头中包含一个函数调用,我相信每次迭代都会对它进行评估。在这方面,高级循环有什么不同?为什么不同?可以将其理解为: { I

我有以下代码:

for (Attribute thisAttribute : factor.getAttributes()) {
// blabla
}
其中
factor.getAttributes()
返回
List


显然,只有一个对
factor.getAttributes()
的初始调用,然后遍历开始。然而,我不明白为什么只有一个电话。如果我在一个常规的
for()
循环的头中包含一个函数调用,我相信每次迭代都会对它进行评估。在这方面,高级循环有什么不同?为什么不同?

可以将其理解为:

{
    Iterator<Attribute> it = factor.getAttributes().iterator();
    while (it.hasNext()) {
        Attribute thisAttribute = it.next();
        // loop body here
    }
}

对于每个循环,对于普通For循环来说都有点不同。您需要了解,对于每个循环,我们都会获取集合,并使用迭代器来循环。那么JVM如何知道我的意思是在开始时只获取集合一次?这取决于您所谈论的循环头部分调用某个对象的频率。在经典循环中,
for(int i=getStartInt();i
getStartInt
方法只调用一次(当循环首次启动时),而
checkLimit
在每次迭代开始时调用。增强的
for
循环在使用时有点不同。@James您希望在每次迭代中调用
factor.getAttributes()
有什么具体原因吗?当然没有。我按照我想要的方式工作,但我想知道为什么。吹毛求疵:这不应该是
Iterator it=factor.getAttributes().terator()?JLS参考:当然!当我们想到更复杂的事情时,我们往往会忽略一些琐碎的事情;):P
for (I #i = Expression.iterator(); #i.hasNext(); ) {
    {VariableModifier} TargetType Identifier =
        (TargetType) #i.next();
    Statement
}