Сколько строковых объектов будет создано в куче при выполнении `String a = «Hello » + «World»;` в Java?

«Сколько строковых объектов будет создано в куче при выполнении `String a = «Hello » + «World»;` в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Один объект. Компилятор Java выполняет оптимизацию, известную как конкатенация строковых литералов на этапе компиляции. Оба литерала объединяются в один, и в пуле строк (String Pool) кучи создается единственный объект "Hello World".

// Код после компиляции эквивалентен:
String a = "Hello World";

Почему? Потому что оба операнда — строковые литералы, известные на этапе компиляции.

Контраст с runtime-конкатенацией:

String b = "Hello";
String c = b + " World"; // Создается новый объект StringBuilder, затем новая строка "Hello World" в куче.

В этом случае результат не является литералом, и конкатенация происходит во время выполнения, что приводит к созданию дополнительных объектов.