Константы и переменные времени компиляции
Документация по языку 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
трактуется компилятором как постоянная времени компиляции?
Наконец, что я понимаю из ответов:
final static
означает постоянную времени компиляциитолько чтоfinal
означает, что это константа, но инициализируется во время выполнениятолько чтоstatic
означает инициализирован во время выполнениябезfinal
является переменной и не будет рассматриваться как константа.Правильно ли мое понимание?