Тонкости оператора switch

Да, это целая статья по самому обычному switch в JDK 7. Бывает так, что накопленный материал кажется интересным и малоизвестным, а потом оказывается, что любая бабка у подъезда уже 50 лет знает об особенностях реализации switch. Но я попробую. Для затравки, предлагаю 3 вопроса:(Простой) Каков результат работы этого кода? switch (5){ default: System.out.print (0); case 1: System.out.print (1); break; case 4: System.out.print (4); case 2: System.out.print (2); } Следующие 2 варианта практически одинаковы. Немного отличаются литералами.//Вариант 1 switch («BBBBBB»){ case «AaAaAa»: break; case «AaAaBB»: break; case «AaBBAa»: break; case «AaBBBB»: break; case «BBAaAa»: break; case «BBAaBB»: break; case «BBBBAa»: break; case «BBBBBB»: break; } //Вариант 2 switch («BBBBBB_8»){ case «AaAaAa_1»: break; case «AaAaBB_2»: break; case «AaBBAa_3»: break; case «AaBBBB_4»: break; case «BBAaAa_5»: break; case «BBAaBB_6»: break; case «BBBBAa_7»: break; case «BBBBBB_8»: break; } Почему первый switch выполняется в несколько раз медленнее, по крайней мере, с отключенным JIT (-Djava.compiler=NONE)? Сами проверьте в цикле! JIT таким кодом не проведешь, но если немного пошаманить, то небольшая разница будет заметна. Какова вычислительная сложность алгоритма нахождения совпадающего значения среди n case-ов (по крайней мере, в JDK 7)? Читать ответы и статью

© Habrahabr.ru