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
}