java—在for循环中声明数组长度的变量

vsikbqxv  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(415)

这个问题在这里已经有答案了

调用array.length的成本是多少(8个答案)
5年前关门了。
我最近在查看代码时注意到了这种语法在for循环中的使用

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

相对于:

for(int i = 0; i < myArray.length; i++){
    //some code
}

因为不必在每个循环中一直查找myarray.length属性,所以它的效率更高。
我创建了一个测试来检查是否是这样,在所有的测试中,第一个for-loop方法比第二个要快很多(大约70%)。
我很好奇为什么这种语法没有被更广泛地采用,而且我正确地认为它是通过数组使用for循环的更好方法。

ltqd579y

ltqd579y1#

这是一个缓存优化,如您所注意到的,可以防止对 length . 通常,不需要执行这种微优化,这可能解释了为什么大多数工程师都乐于检查 length 在每个循环之后,而不是将其缓存掉,但这在高性能代码中很有用。也可以这样写,反转循环的方向,避免使用另一个变量来保持数组的长度:

for (int i = myArray.length - 1; i >= 0; i--) {
    // some code
}
nkoocmlb

nkoocmlb2#

在我看来,大多数java程序员在数组的情况下都会使用for-each循环,除非我们想对索引值进行一些操作

zzzyeukh

zzzyeukh3#

第一种方法只计算一次长度,而不是第二种方法,即每个循环计算一次长度。

相关问题