Объявление Java String - PullRequest
       2

Объявление Java String

20 голосов
/ 06 сентября 2010

В чем разница между String str = new String("SOME") и String str="SOME" Дает ли эти декларации изменение производительности.

Ответы [ 3 ]

40 голосов
/ 06 сентября 2010
String str = new String("SOME")

всегда создайте новый объект в куче

String str="SOME" 

использует пул строк

Попробуйте этот небольшой пример:

        String s1 = new String("hello");
        String s2 = "hello";
        String s3 = "hello";

        System.err.println(s1 == s2);
        System.err.println(s2 == s3);

Чтобы избежать создания ненужных объектов в куче, используйте вторую форму.

9 голосов
/ 06 сентября 2010

Существует небольшая разница между ними.

Второе объявление назначает ссылку, связанную с константой SOME, переменной str

Первое объявление создает новую строку, имеющую значениезначение константы SOME и присваивает ее ссылку на переменную str.

В первом случае была создана вторая строка с тем же значением, что и SOME, что подразумевает большее время инициализации.Как следствие, вы должны избегать этого.Кроме того, во время компиляции все константы SOME преобразуются в один и тот же экземпляр, который использует гораздо меньше памяти.

Как следствие, всегда предпочитают второй синтаксис.

0 голосов
/ 02 октября 2016

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

Второй вариант создаст строковый литерал только в пуле, и str будет ссылаться на него. Таким образом, будет создан только 1 объект и 1 ссылка. Эта опция всегда будет использовать экземпляр из пула строк вместо создания нового при каждом его выполнении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...