我正在查看一个java项目并发现了一个for
循环的写法如下:
for(int i=1; i<a.length; i++)
{
...........
...........
...........
}
我的问题是:计算成本是否昂贵?a.length
(这里 a 是数组名称)?如果没有那么怎么办a.length
是在内部计算的(意味着 JVM 如何确保 O(1) 访问它)?类似于:
int length = a.length;
for(int i=1; i<length; i++)
{
...........
...........
...........
}
即就像访问函数内局部变量的值一样。谢谢。
我的问题是:计算 a.length 的成本高吗
不。它只是数组上的一个字段(请参阅JLS 第 10.7 节 http://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.7)。它的成本并不高,而且 JVM 知道它永远不会改变,并且可以适当地优化循环。 (事实上,我希望一个好的 JIT 能够注意到用非负数初始化变量的正常模式,检查它是否小于length
然后访问数组 - 如果它注意到这一点,它可以删除数组边界检查。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)