我在看一个 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++)
{
...........
...........
...........
}
即就像在函数内部访问局部变量的值一样。谢谢。
最佳答案
My question is: is it costly to calculate the a.length
没有。它只是数组中的一个字段(参见 JLS section 10.7 )。它并不昂贵,而且 JVM 知道它永远不会改变并且可以适本地优化循环。 (事实上 ,我希望一个好的 JIT 能够注意到用非负数初始化变量的正常模式,检查它是否小于 length
然后访问数组 - 如果它注意到,它可以去除数组边界检查。)
关于java - Java 中 <Array Name>.length 的时间复杂度或隐藏成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17998386/