时间复杂度或隐性成本 Java中的.length

我在看一个用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节)。它并不昂贵,并且JVM知道它永远不会改变,并且可以适当地优化循环。(实际上,我希望一个好的JIT能够注意到使用非负数初始化变量的正常模式,检查它是否小于length,然后访问数组-

如果它注意到,则可以删除数组边界检查。)

以上是 时间复杂度或隐性成本 Java中的.length 的全部内容, 来源链接: utcz.com/qa/413131.html

回到顶部