我想知道这样的构造:

 for (Suits suit : Suits.values()) {
        // do stuff
}


将立即在此编译:

     Suits[] suits = Suits.values();
       for (Suits suit : suits ) {
            // do stuff
      }


我的理解是,它们将在经过几圈后被编译为第二种形式,但是会发生在第一圈吗?

最佳答案

第一个编译阶段是javac编译器。您应该注意,当将for-each构造作为语法添加时,不需要对基础字节码进行任何更改,并且这些编译将基本相同。

这距离JIT优化代码还很早。

注意:如果您担心性能,那么您最后要做的就是调用Enum.values(),因为这每次都会创建一个新数组(因此会产生大量垃圾)。我建议您将此数组缓存在不会被修改的位置。

09-18 21:47