Константы и переменные времени компиляции

В документации по языку Java сказано:

Если примитивный тип или строка определены как константа и их значение известно во время компиляции, компилятор заменяет имя константы везде в коде ее значением. Это называется константой времени компиляции константой.

Как я понимаю, если у нас есть кусок кода:

private final int x = 10;

Тогда компилятор заменит каждое вхождение x в коде на литерал 10.


Но предположим, что константа инициализируется во время выполнения:

private final int x = getX(); // here getX() returns an integer value at run-time.

Будет ли падение производительности (каким бы незначительным оно ни было) по сравнению с константой времени компиляции?


Другой вопрос, будет ли нижеприведенная строка кода:

private int y = 10; // here y is not final

рассматриваться компилятором так же, как константа времени компиляции?


Наконец, из ответов я понял следующее:

  1. final static означает константу времени компиляции
  2. just final означает, что это константа, но инициализируется во время выполнения
  3. just static означает инициализацию во время выполнения
  4. without final является переменной и не будет рассматриваться как константа.

Правильно ли мое понимание?

37
задан NINCOMPOOP 20 April 2018 в 02:14
поделиться