Память JVM и анонимные строки
Есть код:
String str = “text” + “second text”;
После выполнения кода переменная str будет ссылаться на строку, находящуюся в пуле строк. Будет ли создаваться в данном пуле ячейки для “text” и “second text” во время выполнения данной инструкции?
Ответы (1 шт):
Автор решения: default locale
→ Ссылка
Нет, уже компилятор сольет две константы и оставит одну строку. В байткоде уже будет эквивалент:
String str = "textsecond text";
Проверить это можно следующим образом. Скомпилируем код:
class Main {
String str = "text" + "second text";
}
Потом выведем байткод с помощью команды javap -c Main.class:
Compiled from "Main.java"
class Main {
java.lang.String str;
Main();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #2 // String textsecond text
7: putfield #3 // Field str:Ljava/lang/String;
10: return
}
Видим константу String textsecond text