他,
我对java中的高级for循环有疑问.如果有一个方法调用Method.returnArray(),我用for(ArrayElement e:Method.returnArray())迭代数组{// do smth}
每次迭代都会调用.returnArray()吗?
谢谢.
Pét*_*rök 40
不,它不会.第一次调用的结果将存储在编译代码中的临时变量中.
来自Effective Java 2nd.埃德.,第46项:
请注意,即使对于数组,使用for-each循环也不会有性能损失.实际上,在某些情况下,它可能比普通的for循环提供轻微的性能优势,因为它只计算一次数组索引的限制.
And*_*s_D 11
从java语言规范:
EnhancedForStatement:
for ( VariableModifiersopt Type Identifier: Expression) Statement
Run Code Online (Sandbox Code Playgroud)
后来:
T[] a = Expression;
L1: L2: ... Lm:
for (int i = 0; i < a.length; i++) {
VariableModifiersopt Type Identifier = a[i];
Statement
}
Run Code Online (Sandbox Code Playgroud)
这是(伪代码)等效于数组的高级for循环.并且清楚地表明,对Expression进行一次计算并将结果数组赋值给T[] a.
因此,在高级for循环语句中使用复杂的表达式是完全安全的.
没有。
for循环只是语法糖。根据它是否应用于Array参数或实现Iterable接口的对象,其行为有所不同。
对于Iterable对象,循环扩展为如下所示:
Iterator<ArrayElement> iter = iterableObject.iterator();
while (iter.hasNext()) {
ArrayElement e = iter.next();
// do smth
}
Run Code Online (Sandbox Code Playgroud)
您的示例代码实际上在做什么,就像这样:
Object[] temp = Method.returnArray();
for ( int i = 0; i < temp.length; i++ ) {
ArrayElement e = (ArrayElement) temp[i];
// do smth
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7891 次 |
| 最近记录: |