私はそれが「非常に」速いと信じて、の速度に興味がありました、しかし私はそれを期待したとき(確かな理由はありません)switch
、単一のスイッチが約4つのテストとほぼ同じくらい速いことを示すように見えるテストケースを持っていますif
1つのテストと同じくらい速くなります。これが私が比較するために書いた2つの方法switch
ですif
:
public static int useSwitch(int i) {
switch (i) {
case 1: return 2;
case 2: return 3;
case 3: return 4;
case 4: return 5;
case 5: return 6;
case 6: return 7;
default: return 0;
}
}
public static int useIf(int i) {
if (i == 1) return 2;
if (i == 2) return 3;
if (i == 3) return 4;
if (i == 4) return 5;
if (i == 5) return 6;
if (i == 6) return 7;
return 0;
}
これが私のテストコードです:
long x = 0;
for (int i = 0; i < 999999; i++)
x += useIf(i % 7); // I use "x" so calls won't get optimized out
そして別の同じループuseSwitch()
私のマシンでは、これらのループが完了するまでにほぼ同じ時間がかかります。これは驚きでした。
入力範囲を指定した場合の平均であるため、ifの数は「4」になりました(私は思います)。
ロジックオプションの数を減らすと、if
バージョンが著しく速くなります。
私の質問は:
それはswitch
実際にはそれほど速くないのですか、それともこれは何らかの形で「不公平な」テストですか?