Кто может объяснить, что происходит?
public class MagicFinal {
public static void main(String[] args) {
System.out.println(A.s);
}
}
class A {
static {
System.out.println("class has been loaded");
}
public static final String s = "final";
public static final Integer i = 3;
}
Консоль:
конечная
Что это? Я не понимаю, почему класс не был загружен, я знаю, что классы всегда загружаются при первом вызове. Поле s
находится в пуле строки, я вижу, что последний модификатор является магическим.
Если я удалю последний модификатор (public static String s = "final"
), я получу
Консоль:
был загружен
конечная
Примечание. Я изменил поле i
: public static final int i = 3;
и покажу его в консоли.
Я получил то же самое, что и в ситуации String. Почему?