gpt4 book ai didi

java - 调用 array.length 的成本是多少

转载 作者:IT老高 更新时间:2023-10-28 20:32:09 29 4
gpt4 key购买 nike

在我们的应用程序中将 for 循环更新为 for-each 循环时,我遇到了很多这样的“模式”:

for (int i = 0, n = a.length; i < n; i++) {
...
}

而不是

for (int i = 0; i < a.length; i++) {
...
}

我可以看到您获得了集合的性能,因为您不需要在每个循环中调用 size() 方法。但是用数组呢??

那么问题来了:array.length 比普通变量贵吗?

最佳答案

不,对 array.length 的调用是 O(1) 或恒定时间操作。

由于 .length 是(行为类似于)arraypublic final 成员,因此它不是访问速度比局部变量慢。 (这与调用 size() 之类的方法非常不同)

现代 JIT 编译器很可能会立即优化对 .length 的调用。

您可以通过查看 OpenJDK 中 JIT 编译器的源代码或让 JVM 转储 JIT 编译的 native 代码并检查代码来确认这一点。

请注意,JIT 编译器可能无法执行此操作;例如

  1. 如果您正在调试封闭方法,或者
  2. 如果循环体有足够的局部变量来强制寄存器溢出。

关于java - 调用 array.length 的成本是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1208320/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com