Память 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

→ Ссылка