Документация на языке Java гласит: «Если примитивный тип или строка определяется как константа, а значение известно во время компиляции, компилятор заменяет имя константы всюду в коде своим значением. называется константой времени компиляции ».Константы и переменные времени компиляции
Так я понимаю, если у нас есть кусок кода:
private final int x = 10;
Тогда компилятор заменит каждое вхождение «х» в коде с буквальным «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
означает время компиляции постоянной- просто
final
означает, что его постоянная, но инициализируется во время выполнения - просто
static
означает, что инициализировано во время выполнения - без
final
является переменной и не будет считаться константой.
Насколько я понял правильно?
о пункте 2. Вы ошибаетесь! final int a = 1; a - постоянная времени компиляции. final int b; b = 1; b не является – landry