Объявление строки Java

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

Ответы

Ответ 1

String str = new String("SOME")

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

String str="SOME" 

использует String pool

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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