Хорошо, этот вопрос является расширением этого вопроса
Строки Java: "String s = new String("silly"); "
Вышеприведенный вопрос задавал тот же вопрос, что и этот, но у меня есть новый пункт сомнения.
В соответствии с Эффективной Java
и ответами на вопрос выше, мы должны неделать String s = new String("новая строка");
, потому что это создаст ненужный объект.
Я не уверен в этом выводе, потому что я думаю, что Java выполняет автоматическое интернирование строк, что означает, что для строки в любом случае существует только одна ее копия в памяти.
Итак, давайте посмотрим String s = new String("новая строка");
.
"новая строка"
уже является строкой, созданной в памяти.
Когда я делаю String s = new String("новая строка");
, тогда s
также "новая строка"
. Таким образом, согласно автоматическое интернирование строк
, s
должно указывать на тот же адрес памяти, что и "новая строка"
, верно?
Тогда как мы можем говорить, что создаем ненужные объекты?