Пример:
int foo() {
int value = 0;
return value++;
}
Метод вернет 0, но что произойдет с переменной value? Будет ли компилятор генерировать код для ++? Или оптимизирует? И как это проверить?
Ответ
Метод вернет 0, но что произойдет с переменной value? Будет ли
компилятор генерировать код для ++? Или оптимизирует? И как это
проверить?
Вот что я обнаружил когда открыл откомпилированный файл (с расширением .class) в Intellij IDEA. После декомпиляции код будет выглядеть так (в Java 8):
int foo() {
int value = 0;
byte var10000 = value;
int var2 = value + 1;
return var10000;
}
Компилятор создаст новую переменную var10000 как вы видите в виде byte так как переменная value равна нулю и byte будет вполне достаточно и сэкономит нам памяти. Потом почему то создает новую переменную var2 типа int и добавляет единичку и возвращает результат.
Если хотите проверить в других компиляторах, то в IDE выберете нужную Вам версию JDK, или даже можно пользоваться jd декомпилятором без IDE.
Комментариев нет:
Отправить комментарий