Страницы

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

вторник, 31 декабря 2019 г.

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

#логика #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



Маленький эксперимет. Вариант 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

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

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