結(jié)論:switch比if快10倍左右。
原理分析:
1.switch用來根據(jù)一個(gè)整型值進(jìn)行多路分支,并且編譯器可以對(duì)多路分支進(jìn)行優(yōu)化
2.switch-case只將表達(dá)式計(jì)算一次,然后將表達(dá)式的值與每個(gè)case的值比較,進(jìn)而選擇執(zhí)行哪一個(gè)case的語句塊
3.if..else 的判斷條件范圍較廣,每條語句基本上獨(dú)立的,每次判斷時(shí)都要條件加載一次。所以在多路分支時(shí)用switch比if..else if .. else結(jié)構(gòu)要效率高。
下面是測(cè)試使用的代碼:
package com.carl.java.base.flowControl;
/**
*
* 結(jié)論:switch比if快10倍左右。
* 原理分析:
* 1.switch用來根據(jù)一個(gè)整型值進(jìn)行多路分支,并且編譯器可以對(duì)多路分支進(jìn)行優(yōu)化
* 2.switch-case只將表達(dá)式計(jì)算一次,然后將表達(dá)式的值與每個(gè)case的值比較,進(jìn)而選擇執(zhí)行哪一個(gè)case的語句塊
* 3.if..else 的判斷條件范圍較廣,每條語句基本上獨(dú)立的,每次判斷時(shí)都要條件加載一次。所以在多路分支時(shí)用switch比if..else if .. else結(jié)構(gòu)要效率高。
*/
public class TestIfSwitchEfficiency {
public static void main(String[] args) {
String aaa = "aaa";
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語句測(cè)試代碼:
long tt1 = 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 tt2 = System.nanoTime();
System.out.println("switch : " + (tt2 - tt1));
}
}