Страницы

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

четверг, 20 декабря 2018 г.

Как поступит Java при компиляции?

Код: int x = 1; if (x != 2) { int y = 2;} int z = x + y; System.out.print(z); Собственно говоря, этот код, несмотря на if, в любом случае эквивалентен этому: System.out.print(3); А теперь сам вопрос Что запишет в скомпилированный файл java? Короткую или длинную версию кода?


Ответ

Маленький эксперимет. Вариант 1 public static void main(String[] args) { int x = 1; int y = 0; if (x != 2) { y = 2;} int z = x + y; System.out.print(z); } Никаких изменений. 1 в 1. Вариант 2 Исходник: public static void main(String[] args) { int x = 1 + 4; int y = 0 + x; if (x != 2) y = 2; int z = x + y - y + y - x + x; System.out.print(z); } декомпиляция: public static void main(String[] args) { int x = 5; int y = 0 + x; if (x != 2) y = 2; int z = x + y - y + y - x + x; System.out.print(z); } Как и ожидалось, ушло только очевидное сложение. Вариант 3 А вот с константами всё интереснее: Исходник: public static void main(String[] args) { final int x = 1 + 4; final int y = 1 + x; final int z = x + y - y + y - x + x; System.out.print(z); } Декомпиляция: public static void main(String[] args) { int x = 5; int y = 6; int z = 11; System.out.print(11); } Вот тут уже оптимизатор оттянулся как захотел) Инструменты JDK 1.7.0.9 + JD 0.6.2

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

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