Как и с switch
над String
, байт-код не изменился, и в этом не было необходимости.
Хотя байт-код был специально разработан для использования в качестве цели для компиляции Java источника код, это не ограничено таким же образом. См. Также Функции байт-кода, недоступные на языке Java …
. Выражение switch
использует функцию, ранее не использовавшуюся в обычном коде Java, но несомненно используемую автоматикой * 1025. * генераторы кода или компиляторы для других языков программирования, нацеленных на JVM, возможность помещать значения sh в стек операндов в различных ветвях вариантов коммутации, которые будут использоваться после точки слияния. Для старого доброго оператора switch
вам всегда приходилось сохранять значение в локальной переменной и загружать его после точки слияния.
〈Другая функция, не используемая обычным кодом Java, но работающая с Java байт-код, это (ab) использовать инструкцию переключения для создания необычных циклов, просто имея целевое местоположение (я) перед инструкцией переключения. Кто знает, будет ли когда-нибудь использоваться функция исходного кода в будущей языковой версии… version
Но будет ли использоваться промежуточная локальная переменная или нет, это не должно иметь большого значения. После того как оптимизатор преобразовал код в форму SSA , все переносы между локальными переменными и стеком операндов исключаются даже до применения других преобразований и оптимизации кода.
Это не исключает неожиданные различия в производительности , вызванные незначительными изменениями команды переключения в конкретной реализации (версии).