用 for-each 循环替换 for 循环时,开发人员经常会遇到以下模式:
for (int i = 0, n = a.length; i 而不是更简单的:
for (int i = 0; i 这提出了一个问题:额外的 n = a.length 赋值是否会影响数组的性能?
答案
不,对 array.length 的调用是O(1) 或常数时间操作。
数组的 .length 属性是公共最终成员,访问它并不比局部变量慢。这与 size() 等方法调用不同,后者通常会涉及更多开销。
现代 JIT 编译器还可以优化对 .length 的调用以完全消除它。要验证这一点,可以检查 JIT 编译器的源代码或检查转储的本机代码。
但是,JIT 编译器可能并不总是能够执行此优化,例如在启用调试或启用调试时循环体包含过多的局部变量。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3