我想知道这样的构造:
for (Suits suit : Suits.values()) {
// do stuff
}
将立即在此编译:
Suits[] suits = Suits.values();
for (Suits suit : suits ) {
// do stuff
}
我的理解是,它们将在经过几圈后被编译为第二种形式,但是会发生在第一圈吗?
最佳答案
第一个编译阶段是javac
编译器。您应该注意,当将for-each
构造作为语法添加时,不需要对基础字节码进行任何更改,并且这些编译将基本相同。
这距离JIT优化代码还很早。
注意:如果您担心性能,那么您最后要做的就是调用Enum.values()
,因为这每次都会创建一个新数组(因此会产生大量垃圾)。我建议您将此数组缓存在不会被修改的位置。