将 for 循环替换为 for-each 循环时,开发人员经常会遇到以下模式:
<code class="java">for (int i = 0, n = a.length; i < n; i++) { ... }</code>
而不是更简单的:
<code class="java">for (int i = 0; i < a.length; i++) { ... }</code>
这提出了一个问题:额外的 n = a.length 赋值是否会影响数组的性能?
否,对 array.length 的调用是 O(1) 或常数时间操作。
数组的 .length 属性是公共最终成员,访问它并不比局部变量慢。这与 size() 等方法调用不同,后者通常会涉及更多开销。
现代 JIT 编译器还可以优化对 .length 的调用以完全消除它。要验证这一点,可以检查 JIT 编译器的源代码或检查转储的本机代码。
但是,JIT 编译器可能并不总是能够执行此优化,例如在启用调试或启用调试时循环体包含过多的局部变量。
以上是## 在 for 循环中调用 `array.length` 是性能瓶颈吗?的详细内容。更多信息请关注PHP中文网其他相关文章!