Объявление строки 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 ссылка. Этот параметр будет использовать экземпляр из пула строк всегда, а не создавать новый каждый раз при его выполнении.