三目运算符和if_else引发的血案
背景
刚刚入职,在看各种代码。在很多业务逻辑的判读通篇都是用的if-else,思考:程序猿都是爱偷懒的,对于一些简单的逻辑能否该用三目运算符呢,这样整个代码也不会显得十分冗余,在简洁度上面看起来也比较舒服。
既然三目运算符相比与if-else来说,比较简洁,那么他们在性能上又有没差异呢?
结论是:三目运算符的运算速度比if-else的效率高出1~0.5倍左右,当然机器可能也会导致误差和结果波动,百度上有测出2倍多的 ,对着数据表示怀疑- -!!
下文基于三目运算符多效率为什比if-else效率高做了分析
码上告诉你
StopWatch sw = new StopWatch();
sw.start("if-else");
for (int i = 1; i <= size; i++) {
if (a > b) {
temp = a;
} else {
temp = b;
}
}
sw.stop();
sw.start("Tri-");
for (int i = 1; i <= size; i++) {
temp = a > b ? a : b;
}
sw.stop();
System.out.println(sw.prettyPrint());
结果输出
size = 10000;
StopWatch '': running time (millis) = 3
-----------------------------------------
ms % Task name
-----------------------------------------
00002 067% if-else
00001 033% Tri-
size = 10 0000
StopWatch '': running time (millis) = 29
-----------------------------------------
ms % Task name
-----------------------------------------
00016 055% if-else
00013 045% Tri-
size = 100 0000
StopWatch '': running time (millis) = 279
-----------------------------------------
ms % Task name
-----------------------------------------
00150 054% if-else
00129 046% Tri-
ps:这里为了直观显示结果,选用stopwatch来计时;时间统计可以用stopwatch或者System.currentTimeMillis,stopWatch对小数做了过滤,如果自己想测试的话,建议用currentTimeMills这个可以更加直观的看到数值末尾的波动
改用:System.currentTimeMillis 的计算得出的结果
max = If-else_time/ Tri_time
size = 100 0000
[ 9 ] max :1.8148148148148149<