Java SwitchとIf elseの使用効率の比較と分析


前言
私たちの実際の開発では、論理の方向を判断する文法がよく使われています.最もよく知られている論理判断はswitchとif elseの2つですが、それらの間にはいったいどれが優れているのでしょうか.一緒に実験をしましょう.実はこの1篇は私はそんなにくどくどしたくなくて、书く责任のある态度に基づいて、私はやはり惯例に従って前言あるいは导语を书いて、実は私はとても言いたいです:くどくどしないで、直接机に乗ってナノをテストして时间をかけましょう!!
一、if else
long t1 = System.nanoTime();
String aaa="";
if("1".equals(aaa)){
    System.out.println(aaa);
} else if ("2".equals(aaa)) {
    System.out.println(aaa);
} else if ("3".equals(aaa)) {
    System.out.println(aaa);
} else if ("4".equals(aaa)) {
    System.out.println(aaa);
} else if ("5".equals(aaa)) {
    System.out.println(aaa);
} else if ("6".equals(aaa)) {
    System.out.println(aaa);
} else if ("7".equals(aaa)) {
    System.out.println(aaa);
} else if ("8".equals(aaa)) {
    System.out.println(aaa);
} else if ("9".equals(aaa)) {
    System.out.println(aaa);
} else if ("10".equals(aaa)) {
    System.out.println(aaa);
} else if ("11".equals(aaa)) {
    System.out.println(aaa);
} else if ("12".equals(aaa)) {
    System.out.println(aaa);
} else if ("13".equals(aaa)) {
    System.out.println(aaa);
} else if ("14".equals(aaa)) {
    System.out.println(aaa);
} else {
    System.out.println(aaa);
}
long t2 = System.nanoTime();
Log.d("aaa","if : " + (t2 - t1));

最終結果表示の実行:
D/aaa: if : 94739

二、switch
long t1 = System.nanoTime();
String aaa="";
switch (aaa) {
    case "1":
        System.out.println(aaa);
        break;
    case "2":
        System.out.println(aaa);
        break;
    case "3":
        System.out.println(aaa);
        break;
    case "4":
        System.out.println(aaa);
        break;
    case "5":
        System.out.println(aaa);
        break;
    case "6":
        System.out.println(aaa);
        break;
    case "7":
        System.out.println(aaa);
        break;
    case "8":
        System.out.println(aaa);
        break;
    case "9":
        System.out.println(aaa);
        break;
    case "10":
        System.out.println(aaa);
        break;
    case "11":
        System.out.println(aaa);
        break;
    case "12":
        System.out.println(aaa);
        break;
    case "13":
        System.out.println(aaa);
        break;
    case "14":
        System.out.println(aaa);
        break;
    default:
        System.out.println(aaa);
        break;
}
long t2 = System.nanoTime();
Log.d("aaa","switch: " + (t2 - t1));

最終結果表示の実行:
D/aaa: switch: 8125

比較するとifとswitchの運転効率は10倍程度異なることが分かった.何がこんなに大きな差をもたらしたのでしょうか.
三、原理分析
  • if ..elseが論理的に判断する場合、if文ごとに独立してロードする必要があり、判断を1回実行します.これが時間のかかるメカニズムの問題です.
  • switch..caseは、1つの値に基づいて多重分岐し、1回だけ計算し、式の値を各caseの値と比較し、どのcase文ブロックを選択します.

  • 四、まとめ
  • switchはcaseが定数の場合しか処理できず,定数でない場合にはどうしようもない.例えばif(a>1&&a<100)は関係論理に属し,switch...caseでは処理できない.
  • switchは定数選択分岐時にifよりのみ有効である.elseは効率的ですがif..Elseはより多くの場合に適用できますif..elseは比較的柔軟です.