Страницы

Поиск по вопросам

понедельник, 18 февраля 2019 г.

Что произойдет с переменной после return value++?

Пример:
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.

Комментариев нет:

Отправить комментарий