如果您正在循环访问数组,则无关紧要 - 增强的 for 循环无论如何都使用数组访问。
例如,请考虑以下代码:
public static void main(String[] args)
{
    for (String x : args)
    {
        System.out.println(x);
    }
}
当与反编译时,我们得到(对于方法):javap -c Testmain
public static void main(java.lang.String[]);
  Code:
   0:   aload_0
   1:   astore_1
   2:   aload_1
   3:   arraylength
   4:   istore_2
   5:   iconst_0
   6:   istore_3
   7:   iload_3
   8:   iload_2
   9:   if_icmpge   31
   12:  aload_1
   13:  iload_3
   14:  aaload
   15:  astore  4
   17:  getstatic   #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   20:  aload   4
   22:  invokevirtual   #3; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   25:  iinc    3, 1
   28:  goto    7
   31:  return
现在将其更改为使用显式数组访问:
public static void main(String[] args)
{
    for (int i = 0; i < args.length; i++)
    {
        System.out.println(args[i]);
    }
}
这将反编译为:
public static void main(java.lang.String[]);
  Code:
   0:   iconst_0
   1:   istore_1
   2:   iload_1
   3:   aload_0
   4:   arraylength
   5:   if_icmpge   23
   8:   getstatic   #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   11:  aload_0
   12:  iload_1
   13:  aaload
   14:  invokevirtual   #3; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   17:  iinc    1, 1
   20:  goto    2
   23:  return
增强的 for 循环中有更多的设置代码,但它们基本上都在做同样的事情。不涉及迭代器。此外,我希望他们能让JITted获得更相似的代码。
建议:如果你真的认为它可能会产生重大影响(只有当循环的主体绝对微不足道时,它才会这样做),那么你应该用你的实际应用程序来衡量它。这是唯一重要的情况。