Мне было любопытно, что скорость на switch
, полагая, что она была "очень" быстрой, но у меня есть тестовый пример, который, кажется, показывает один переключатель примерно так же быстро, как около 4 if
тестов, когда Я ожидал (нет веской причины), чтобы это было так же быстро, как 1 тест. Вот два метода, которые я написал, чтобы сравнить 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()
На моей машине эти петли занимают примерно то же самое время, что и стало неожиданностью.
Я пришел к числу ifs как "4", потому что среднее значение задало диапазон ввода (я думаю).
Если я уменьшу количество логических опций, версия if
будет заметно быстрее.
Мой вопрос:
Неужели это switch
на самом деле не так быстро или это "несправедливый" тест каким-то образом?