这是否具有与使用迭代器相同的性能?
是的。两种变体都生成相同的字节码。以下字节码是从 for-each 循环生成的,但在循环中使用迭代器时,它看起来完全相同:
for(Object o : list) {
}
44: aload_1
45: invokevirtual #30 // Method java/util/LinkedList.iterator:()Ljava/util/Iterator;
48: astore_3
49: goto 59
52: aload_3
53: invokeinterface #34, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
58: astore_2
59: aload_3
60: invokeinterface #40, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
65: ifne 52
这在内部如何运作?
在非数组的情况下,for-each 循环在内部使用迭代器。请参阅上面的字节码 - 调用所有方法,在使用迭代器时也会调用这些方法。
另请参阅For-Each 循环和Java 'for each' 循环如何工作?了解更多信息。