在for循环中为数组长度声明变量

Loc*_*234 7 java for-loop

我最近一直在审查代码,注意到在for循环中使用了这种语法

for(int i = 0, len = myArray.length; i < len; i++){
    //some code
}
Run Code Online (Sandbox Code Playgroud)

而不是:

for(int i = 0; i < myArray.length; i++){
    //some code
}
Run Code Online (Sandbox Code Playgroud)

理由是它更有效率,因为您不必继续使用每个循环查找myArray.length属性.

我创建了一个测试来检查是否是这种情况,并且在我的所有测试中,第一个for循环方法显着(大约70%)比第二个快.

我很好奇为什么这个语法没有被广泛采用,我认为这是一种更好的方法来使用for循环通过数组.

Chr*_*tle 5

这是一个缓存优化,正如您所指出的那样,可以防止多次读取length.通常,没有必要执行这种微优化,这可以解释为什么大多数工程师都乐意length在每次循环后检查而不是缓存它,但它在高性能代码中很有用.它也可以这样写,反转循环的方向,避免使用另一个变量来保持数组的长度:

for (int i = myArray.length - 1; i >= 0; i--) {
    // some code
}
Run Code Online (Sandbox Code Playgroud)