Każdy kompilator tworzy tabelę przeskoków, jeśli może sprawdzić, czy wartości są względnie zwarte. (Wątpię, czy są w tym przypadku wielokrotnością 10.)
To jest mikrooptymalizacja. Mikro-optymalizacja ma sens tylko wtedy, gdy wiesz, że tak. Zwykle istnieją większe "ryby do smażenia" w innym miejscu, w postaci wywołań funkcji, które można by wykonać bez. Jednakże, jeśli już dostroiłeś światła dzienne z tego kodu, a twoje profilowanie pokazuje, że znaczna część (np. 10% lub więcej) czasu trafia do tych instrukcji IF (a nie do ich zawartości) to pomaga. Może się tak zdarzyć na przykład w tłumaczeniu kodu bajtowego.
Dodano: Innym powodem, dla którego lubię używać switch
, jest to, nawet jeśli nie tworzy ona tabeli przeskakiwania - podczas przechodzenia przez kod w debugerze przechodzi bezpośrednio do właściwego przypadku, zamiast przeprowadzania mnie przez wiele fałszywych oświadczeń if
. Ułatwia debugowanie.
Dupe od [Czy „else if” szybciej niż „przełącznik() case "?" (http://stackoverflow.com/questions/767821/is-else-if-faster-than-switch-case), [Jaka jest względna różnica wydajności instrukcji if/else versus switch w Javie?] (http://stackoverflow.com/questions/2086529/what-is-the-relative-performance-difference-of-if-else-versus-switch-statement-in), [If vs. Switch Speed] (http://stackoverflow.com/questions/445067/if-vs-switch-speed), itp. – BalusC
To nie jest dup, ponieważ to pytanie jest specyficzne dla java. – sixtyfootersdude
Właściwie masz rację. To jest dupę http://stackoverflow.com/questions/2086529/what-is-relative-performance-difference-of-if-else-versus-switch-statement-in. Nie jest to jednak dupą innych, ponieważ nie są specyficzne dla java. Irytujące, jak efektywność i wydajność to różne tagi. – sixtyfootersdude