Страницы

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

воскресенье, 15 декабря 2019 г.

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

#java #декомпиляция


Пример:

int foo() {
    int value = 0;
    return value++;
}


Метод вернет 0, но что произойдет с переменной value? Будет ли компилятор генерировать
код для ++? Или оптимизирует? И как это проверить?
    


Ответы

Ответ 1



Метод вернет 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.

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

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