在我们的应用程序中将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
否,呼叫array.lengthis O(1)或固定时间操作。
array.lengthis O(1)
由于.lengthis(的行为类似于)的public final成员array,因此访问它的速度不会比局部变量慢。(这与对的方法的调用非常不同size())
.lengthis
public final
array
size()
.length无论如何,现代的JIT编译器很可能会优化调用。
.length
你可以通过查看OpenJDK中的JIT编译器的源代码,或通过使JVM转储JIT编译的本机代码并检查代码来确认这一点。
注意,在某些情况下,JIT编译器无法做到这一点;例如