2016-12-14 3 views
1

Когда мы объявляем строковый литерал какСоздание объекта в момент провозглашения строки в Java

String str = "abc"; 

только один объект создается в Струнный пуле. Но когда мы создаем его как

String str = new String("abc"); 

2 объектов созданы один в памяти кучи другой в Струнный бассейне. Какова цель создания записи в пуле строк, когда у вас уже есть объект, помещенный в память кучи?

+0

Создание объекта 'String' явно из строкового литерала, как вы делаете во втором примере, никогда не бывает полезно. Вам никогда не нужно писать такой код в реальном Java-приложении. – Jesper

+0

Ум, как вы думаете, создается ли первым? Параметр или объект конструктора, созданный с помощью вызова конструктора? – fabian

ответ

1

, Что цель создания записи в струнной пуле, когда у вас уже есть объект, помещенный в динамической памяти

Если объект кучи получает мусор и "abc" требуется снова, то JVM может просто точка для объединения. И, это еще одна причина предпочесть литерал над new для String.

Смотрите так: Why to create a String object using new

What is the purpose of the expression "new String(...)" in Java?