【发布时间】:2015-05-12 11:08:43
【问题描述】:
对不起,如果已经问过了,但我在 stackoveflow 上没有找到答案,也没有看到关于这个领域的官方教程。
问题就在标题中——如果我们有类似的代码
int[] array = new int[20];
for (int el : array) {
...
}
JVM 会作为标准循环运行它
for (int i = 0; i < array.length; i++)
或者它会创建一个迭代器?
UPD此链接可能有助于完成答案
Fastest way to iterate an Array in Java: loop variable vs enhanced for statement
【问题讨论】:
-
你想知道的原因是什么? JVM和优化器可以为所欲为。
-
@chokdee 这是关于优化的。我有一个方法可以在预定义的字符串列表上运行,并检查该列表是否包含包含特定字符串的项目。此方法用作大型应用程序缓存(10k-100k 项)的谓词,因此我们发现 JVM 每次遍历都会创建数千个迭代器。现在它将被重新写入数组,我想知道迭代器实例化。
-
你测量结果了吗?我写了一个简单的 10 万次迭代的测试,结果都一样
-
在这里看到同样的问题:stackoverflow.com/questions/1006395/…
-
@chokdee 感谢您的链接,我知道我需要字节码来验证它,我只是不想浪费时间在可能已经有人检查过的事情上。