java - Java 中 <Array Name>.length 的时间复杂度或隐藏成本

标签 java arrays complexity-theory

我在看一个 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/

相关文章:

java - 帮助了解 Android 应用加载页面中的事件顺序

java - http POST 请求 JSON 对象中的空指针异常错误

java - for 循环之外无法识别数组

algorithm - 使用 N 路合并的时间复杂度

algorithm - 运行时解释

java - 从另一个java类调用main方法类

java - 比较 ArrayList 值和 HashMap 值

javascript - 如何打乱 Javascript 数组以确保每个索引都位于新数组中的新位置?

arrays - 是否可以使用 assertResult 在 ScalaTest 中检查数组是否相等

algorithm - Big O Notation - 自然数 M 和常数因子 C 是什么意思?