javac traktuje statyczny finał inaczej w oparciu o metodę przypisania
Kiedy kompiluję:
public static final boolean FOO = false;
public static final void fooTest() {
if (FOO) {
System.out.println("gg");
}
}
Mam pustą metodęfooTest() {}
. Jednak podczas kompilacji:
static boolean isBar = false;
public static final boolean BAR = isBar;
public static final void fooTest() {
if (BAR) {
System.out.println("gg");
}
}
instrukcja if znajduje się w skompilowanym pliku klasy. Czy to oznacza, że istnieją dwa różne „typy” statycznego finału w java, czy jest to tylko optymalizacja kompilatora?