Java switch与if…else if…else效率对比
本次测试采用的是intel i7-5500U处理器,jdk版本jdk1.8.0_31
if语句测试代码:
long t1 = System.nanoTime();
if("a".equals(aaa)){
System.out.println(aaa);
} else if ("b".equals(aaa)) {
System.out.println(aaa);
} else if ("c".equals(aaa)) {
System.out.println(aaa);
} else if ("d".equals(aaa)) {
System.out.println(aaa);
} else if ("e".equals(aaa)) {
System.out.println(aaa);
} else if ("f".equals(aaa)) {
System.out.println(aaa);
} else if ("g".equals(aaa)) {
System.out.println(aaa);
} else if ("h".equals(aaa)) {
System.out.println(aaa);
} else if ("i".equals(aaa)) {
System.out.println(aaa);
} else if ("j".equals(aaa)) {
System.out.println(aaa);
} else if ("k".equals(aaa)) {
System.out.println(aaa);
} else if ("l".equals(aaa)) {
System.out.println(aaa);
} else if ("m".equals(aaa)) {
System.out.println(aaa);
} else if ("n".equals(aaa)) {
System.out.println(aaa);
} else {
System.out.println(aaa);
}
long t2 = System.nanoTime();
System.out.println("if : " + (t2 - t1));
switch语句测试代码:
long t1 = System.nanoTime();
switch (aaa) {
case "a":
System.out.println(aaa);
break;
case "b":
System.out.println(aaa);
break;
case "c":
System.out.println(aaa);
break;
case "d":
System.out.println(aaa);
break;
case "e":
System.out.println(aaa);
break;
case "f":
System.out.println(aaa);
break;
case "g":
System.out.println(aaa);
break;
case "h":
System.out.println(aaa);
break;
case "i":
System.out.println(aaa);
break;
case "j":
System.out.println(aaa);
break;
case "k":
System.out.println(aaa);
break;
case "l":
System.out.println(aaa);
break;
case "m":
System.out.println(aaa);
break;
case "n":
System.out.println(aaa);
break;
default:
System.out.println(aaa);
break;
}
long t2 = System.nanoTime();
System.out.println("switch : " + (t2 - t1));
测试结果
效率基本在10倍左右浮动。
原理分析
我也是借鉴网上大家的说法在这儿抛砖引玉
1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化
2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选
择执行哪一个case的语句块
3.if…else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载
一次。
所以在多路分支时用switch比if…else if … else结构要效率高。
引用自 黑马程序员——黑马巩伟伟(http://bbs.itheima.com/?4898)
建议
switch…case只能处理case为常量的情况,对非常量的情况是无能为力的。例如 if (a > 1 && a < 100),是无法使用switch…case来处理的。所以,switch只能是在常量选择分支时比ifelse效率高,但是ifelse能应用于更多的场合,ifelse比较灵活。 根据不同场合选择不同的语句。