Когда String создается с использованием ключевого слова new, он создает новый объект String, используя конструктор, который принимает строковый литерал. Я задаюсь вопросом, сохраняется ли литерал в постоянном пуле до того, как вызывается конструктор String.
Причина, по которой я спрашиваю, заключается в том, что в "Руководстве по программированию IEEE SE 7 Java SE 7" Мала Гупта пишет:
public static void main(String[] args)
{
String summer = new String("Summer"); //Line 1: The code creates a new String object with the value "Summer". This object is not placed in the String constant pool.
String summer2 = "Summer" //Line 2: The code creates a new String object with the value "Summer" and places it in the String constant pool.
}
В первой строке она говорит, что объект String, созданный новым, не сохраняется в пуле констант. Это прекрасно, но неясно, есть ли буквальное "лето", которое идет в конструкторе в первой строке.
Во второй строке она говорит, что назначение "Лето" на лето2 хранит его в постоянном пуле, что подразумевает, что буквальная строка в первой строке не была помещена в пул.
Мой вопрос
- Строка 1: Литеральное "Лето" в конструкторе помещается в постоянный пул до того, как вызывается конструктор строк?
- Строка 2: "Летнее" уже существует в пуле в строке 2 или оно вставлено в эту строку?
- Строка 2: автор ошибается, когда говорит, что "Лето" вставлено в пул в строке 2?