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