В документации по языку 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
является переменной и не будет рассматриваться как константа. Правильно ли мое понимание?