onstantes e variáveis em tempo de compilaç
documentação da linguagem Java diz:
Se um tipo primitivo ou uma sequência de caracteres é definida como uma constante e o valor é conhecido no momento da compilação, o compilador substitui o nome da constante em qualquer lugar do código pelo seu valor. Isso é chamado de constante em tempo de compilaçã
Meu entendimento é se tivermos um pedaço de código:
private final int x = 10;
Em seguida, o compilador substituirá todas as ocorrências dex
no código com literal10
.
Mas suponha que a constante seja inicializada no tempo de execução:
private final int x = getX(); // here getX() returns an integer value at run-time.
Haverá uma queda no desempenho (por mais desprezível que seja) em comparação com a constante em tempo de compilaçã
Outra questão é se a linha de código abaixo:
private int y = 10; // here y is not final
é tratado da mesma maneira que a constante em tempo de compilação pelo compilado
Finalmente, o que eu entendo das respostas são:
final static
significa constante em tempo de compilaçãosomentefinal
significa que é uma constante, mas é inicializado em tempo de execuçãosomentestatic
significa inicializado no tempo de execuçãowithoutfinal
é uma variável e não seria tratado como constantMeu entendimento está correto?