很抱歉,如果已经有人问过这个问题,但我在 stackoveflow 上没有找到答案,也没有看到有关该领域的官方教程。
问题就在标题中 - 如果我们有这样的代码
int[] array = new int[20];
for (int el : array) {
...
}
JVM 会将其作为标准 for 循环运行
for (int i = 0; i < array.length; i++)
或者它会创建一个迭代器?
UPD此链接可能有助于完成答案
Fastest way to iterate an Array in Java: loop variable vs enhanced for statement
最佳答案
Java 中的数组不实现 Iterable 接口(interface),因此您无法从数组获取迭代器。此外,您不能在原始类型(例如 int)上使用迭代器,因为原始类型不能是泛型参数。例如。如果你想要一个迭代器,你必须使用迭代器,如果它由 int[] 支持,这将导致大量的自动装箱和拆箱。
JVM 不太可能为数组上的 for-each 循环创建迭代器,因为它的效率非常低。
事实上,编译器会将 for-each 循环转换为索引 for 循环。您可以通过查看该方法的反编译字节码来检查:
源代码:
public void test() {
int[] array = new int[20];
for (int el : array) {
System.out.println("test");
}
}
反编译的字节码:
public void test() {
int[] array = new int[20];
int[] var2 = array;
int var3 = array.length;
for(int var4 = 0; var4 < var3; ++var4) {
int var10000 = var2[var4];
System.out.println("lol");
}
}
关于java - 当 JVM 使用 for-each 循环迭代数组时,它会创建迭代器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30189067/