Различия между 2 способами инициализации строковой переменной

Существует ли разница между инициализацией переменной text 1 cпособом и 2-ым?

1)String text = "Hello";

2)String text = new String("Hello");


Ответы (1 шт):

Автор решения: Andrew Bystrov

Да, существуют.

При первом способе (String text = "Hello") , если строчка "Hello" уже есть в пуле констант, то значение возьмется оттуда. Если такой строчки в пуле нет, то при таком создании она автоматически добавится в пул.

При втором способе (String text = new String("Hello")) будет явно создаваться новая ссылка, не смотря на пул констант. Чтобы явно положить строку в пул при таком создании, используется метод intern

Обычно, используют 1 вариант, чтобы лишний раз не засорять память.

P.S. если уж совсем придираться, то при String text = new String("Hello") сначала строчка Hello возьмется ( если есть) из пула констант, потом уже создаться новая ссылка на text. И вывод text == "Hello" будет false

→ Ссылка