为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循环!