← Назад к вопросам

Сколько строк будет создано в куче при выполнении команды String a = "Hello "+"World"?

1.2 Junior🔥 241 комментариев
#JVM и управление памятью#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

String конкатенация и куча: "Hello " + "World"

Ответ: 1 строка в куче

При выполнении команды String a = "Hello " + "World"; в куче (heap) будет создана одна строка - результат конкатенации.

Почему именно одна?

Компилятор Java выполняет оптимизацию на этапе компиляции (compile-time string concatenation). Строковые литералы, известные на этапе компиляции, объединяются ещё до выполнения программы.

// Исходный код
String a = "Hello " + "World";

// То, что видит компилятор (после оптимизации)
String a = "HelloWorld";

Компилятор просто подставляет уже готовую строку "HelloWorld" в bytecode.

String pool

Строка "HelloWorld" помещается в String Pool (область в куче для интернирования строк). Если позже в коде встретится другая переменная с той же строкой, она будет указывать на тот же объект:

String a = "Hello " + "World";   // 1 объект в pool
String b = "HelloWorld";           // ссылается на ТОТ ЖЕ объект
String c = "Hello " + "World";   // ссылается на ТОТ ЖЕ объект

a == b;  // true
a == c;  // true

Отличие от динамической конкатенации

Если переменные неизвестны на этапе компиляции, ситуация другая:

String greeting = "Hello ";
String name = "World";
String a = greeting + name;  // 2+ объекта в куче!

Здесь:

  1. Создаётся объект StringBuilder
  2. Конкатенация выполняется в runtime
  3. Результат (новая String) также помещается в heap
  4. StringBuilder удаляется после использования

Практический совет

Для большого количества конкатенаций лучше использовать StringBuilder:

StringBuilder sb = new StringBuilder();
sb.append("Hello ");
sb.append("World");
String result = sb.toString();  // 1 финальная строка

Вывод: строковые литералы оптимизируются компилятором, поэтому в куче будет создана всего одна строка, которая кэшируется в String Pool.

Сколько строк будет создано в куче при выполнении команды String a = "Hello "+"World"? | PrepBro