Переменные вообще не объявляются на уровне байт-кода (игнорируя обычные предостережения о метаданных отладки). Вместо этого каждый метод имеет таблицу до 65 535 «слотов», из которой байт-код может хранить и извлекать значения. Компилятор назначит каждой переменной слот, следя за тем, чтобы не использовать слоты для переменных с перекрывающимися диапазонами жизнеспособности.
Так что в вашем примере я бы ожидал, что единственная разница заключается в том, что temp
и i
получают назначенные слоты в другом порядке, но в остальном байт-код идентичен.
При этом, это даже более неактуально, чем вы думаете, потому что байт-код не то, что выполняется (большую часть времени) JVM. Вместо этого это просто абстракция. Для любого кода, где производительность действительно имеет значение, JVM выполнит анализ вашего кода, а затем оптимизирует его и скомпилирует в нативный код, поэтому тривиальные различия в кодировании байт-кода в любом случае совершенно бессмысленны.