更新分钟变量:分钟(A,B)与if语句
问题描述:
什么是更好的做法是跟踪最小的名单:更新分钟变量:分钟(A,B)与if语句
int minVal = a[0];
for (int i = 1; i < a.length; i++) {
minVal = Math.min(minVal, a[i]);
}
或
int minVal = a[0];
for (int i = 1; i < a.length; i++) {
if(a[i] < minVal)
minVal = a[i];
}
虽然第一代码似乎更容易阅读,第二个可能更有效率?
什么是教科书的方式?
答
这是Math.min
实现:
public static int min(int a, int b) {
return (a <= b) ? a : b;
}
条件运算符解析为大致相同的机器代码的if语句;因为所有中间结果都必须存储在的某个地方,因此分配给本地变量几乎是免费的,并且无论如何都会发生在机器代码级别。
如果在执行程序时将循环检测为热点,那么JIT编译器会将Math.min
的完整代码内联到您的循环中。在这一点上,你正在考虑的两种选择之间几乎没有区别。
但是,最终的判断是测量您的代码正在运行。如果–且仅当–出现实际性能问题,则应首先使用分析器查看确切时间花在何处;永远不要相信你的猜测。然后,如果确实发现这个特定的循环是瓶颈,你可以考虑用这两个选项进行测试,看看它是否有什么不同。
如果我们在谈论最佳实践, [不要使用多线括号ifs](http://cafe.elharo.com/blogroll/braceless-if-considered-harmful/) – 2015-01-31 20:42:39