Constantes de tiempo de compilación y variables

La documentación del lenguaje Java dice:

Si un tipo primitivo o una cadena se define como una constante y el valor se conoce en tiempo de compilación, el compilador reemplaza el nombre de la constante en todo el código con su valor. Esto se llama una constante de tiempo de compilación.

Mi comprensión es si tenemos un código:

private final int x = 10;

Entonces, el compilador reemplazará cada aparición dex en el código con literal10.

Pero supongamos que la constante se inicializa en tiempo de ejecución:

private final int x = getX(); // here getX() returns an integer value at run-time.

¿Habrá alguna caída en el rendimiento (por insignificante que sea) en comparación con la constante de tiempo de compilación?

Otra pregunta es si la siguiente línea de código:

private int y = 10; // here y is not final

¿El compilador lo trata de la misma manera que la constante de tiempo de compilación?

Finalmente, lo que entiendo de las respuestas son:

final static significa constante de tiempo de compilaciónsólofinal significa que es una constante pero se inicializa en tiempo de ejecuciónsólostatic significa inicializado en tiempo de ejecuciónsinfinal es una variable y no se trataría como constante.

¿Es mi entendimiento correcto?

Respuestas a la pregunta(14)

Su respuesta a la pregunta