Java编译器是否优化了数组索引查找?

时间:2013-07-15 21:14:37

标签: java compiler-construction

        for (int i = 0; i < array.length; ++i) {
            do something referencing array[i]
            do something referencing array[i]
            ....
        }

在这样的代码中,设置currentValue = array[i]之类的变量然后引用而不是array[i]是否真的有用?我觉得编译器足够聪明,可以做类似的事情并使这些代码变得毫无意义。

1 个答案:

答案 0 :(得分:4)

如果您读取编译器生成的字节代码,您将看到它没有进行此类优化。这意味着在解释模式下,每次都会进行数组查找。如果循环的方法运行了很多次,那么JIT编译器将再次查看它并且可以优化它。

结论:如果您想要可预测的结果,请将数组元素存储在局部变量中。更重要的是,这样代码也变得更具可读性。