Dokumentacja języka Java mówi: "Jeśli typ pierwotny lub łańcuch jest zdefiniowany jako stała, a wartość jest znana w czasie kompilacji, kompilator zastępuje stałą nazwę wszędzie w kodzie jej wartością. jest nazywana stałą czasu kompilacji. "Stałe i zmienne czasowe kompilacji
Więc moje rozumienie jest jeśli mamy kawałek kodu:
private final int x = 10;
Następnie kompilator zastąpi każde wystąpienie „x” w kodzie z dosłownym „10”. Ale powiedzmy Załóżmy, że stała jest inicjowany z wartością w czasie wykonywania,
private final int x = getX(); // here getX() returns an integer value at run-time.
Czy będzie żadnego spadku wydajności (jakkolwiek nieistotny) może być porównana do kompilacji stałą?
Inną kwestią jest to, czy poniższy wiersz kodu:
private int y = 10; // here y is not final
jest traktowany w taki sam sposób jak kompilacji stałą przez kompilator?
EDIT: Wreszcie, co rozumiem z odpowiedzi to:
final static
środki kompilacji stałą- tylko
final
oznacza jego stałą ale jest inicjowany w czasie wykonywania - tylko
static
oznacza zainicjalizowany w czasie wykonywania - bez
final
jest zmienną i nie będzie traktowany jako stały.
Czy moje zrozumienie jest prawidłowe?
o punkcie 2. Mylisz się! końcowy int a = 1; a jest stałą czasu kompilacji. końcowy int b; b = 1; b nie jest – landry