为java调用方法中的每个循环执行高级操作,返回一个数组以便每次迭代?

他,

我对java中的高级for循环有疑问。 如果有一个方法调用Method.returnArray(),我用for(ArrayElement e:Method.returnArray())迭代数组{// do smth}

每次迭代都会调用.returnArray()吗?

谢谢。

从java语言规范 :

EnhancedForStatement: for ( VariableModifiersopt Type Identifier: Expression) Statement 

后来:

 T[] a = Expression; L1: L2: ... Lm: for (int i = 0; i < a.length; i++) { VariableModifiersopt Type Identifier = a[i]; Statement } 

这(在伪代码中)相当于数组的高级for循环。 并且清楚的是, 表达式被评估一次并且所得到的数组被分配给T[] a

因此,在高级for循环语句中使用复杂的表达式是完全安全的。

没有。

for循环只是语法糖。 它的行为会有所不同,具体取决于它是应用于Array参数还是应用于Iterable接口的对象。

对于Iterable对象,循环扩展为如下所示:

 Iterator iter = iterableObject.iterator(); while (iter.hasNext()) { ArrayElement e = iter.next(); // do smth } 

你的示例代码实际上做的是这样的:

 Object[] temp = Method.returnArray(); for ( int i = 0; i < temp.length; i++ ) { ArrayElement e = (ArrayElement) temp[i]; // do smth } 

不,它会被召唤一次。 它不像循环标准的终止条件,它在每次迭代时都会得到评估。

不,我不这么认为。 我会注意到它“生产”(表现不佳)。

所以,去goach循环!