java哪个for循环头性能更好?
我在Android文档中看到了以下内容:
int n = getCount();
for (int i = 0; i < n; i ++) {
// do somthing
}
但我已经习惯于看到和做:
for (int i = 0; i < getCount(); i ++) {
// do somthing
}
我很好奇一个是否比另一个更有效率?在这两种情况下究竟发生了什么?当用第二种方法调用getCount()
时,计算机是否必须分配另一个变量?或者这仅仅是一个代码清洁或偏好的问题
# 1 楼答案
这是JDK1的
javac
编译器所做的。6.0_21为两种情况生成:第一种情况:
编译字节码:
第二种情况:
编译字节码:
结果代码可能不同,但根据
getCount()
,运行时可能会优化执行。一般来说,第一个代码似乎效率更高,特别是当getCount()
执行一些复杂的操作以返回其值时# 2 楼答案
第一个比另一个更有效
在第一个场景中,只调用一次getCount,而在第二个场景中,每次条件检查都调用getCount,这会增加循环的执行时间
# 3 楼答案
问题不在于性能,第二个问题可能会更慢,因为
有输出
您看到循环中的getCount被执行多次了吗?为什么这不是一个问题?你如何比较不同事物的表现?如果行为无关紧要,那么您可以很高兴地将
nop
与themostcomplexComputionInThe
世界进行比较