Как мне скопировать строки в Java?

    String s = "hello";
    String backup_of_s = s;
    s = "bye";

На этом этапе переменная резервной копии все еще содержит исходное значение «привет». (это из-за неизменности String, верно?).

Но так ли это?safe копировать строки с помощью этого метода (который, конечно, небезопасно копировать обычные изменяемые объекты), или лучше написать это? :

    String s = "hello";
    String backup_of_s = new String(s);
    s = "bye";

Другими словами, в чем разница (если таковая имеется) между этими двумя фрагментами?

EDIT - the reason why the first snippet is safe:

Позвольте мне объяснить некоторые вещи немного подробнее, основываясь на уже предоставленных хороших ответах (которые были в основном сфокусированы на вопросе различий в производительности между двумя фрагментами):

Строки являются неизменяемыми в Java, что означает, что объект String не может быть изменен после его создания. Следовательно,

String s = "hello"; создает новый экземпляр String и назначает его адресs (s являясь ссылкой на экземпляр / объект)

String backup_of_s = s; создает новую переменнуюbackup_of_s и инициализирует его так, чтобы он ссылался на объект, на который в данный момент ссылаетсяs.

Примечание: неизменность строки гарантирует, что этот объект не будет изменен: наша резервная копия безопасна

Примечание 2: Механизм сборки мусора Java гарантирует, что этот объект не будет уничтожен, если на него ссылается хотя бы одна переменная (backup_of_s в этом случае)

В заключение,s = "bye"; создает другой экземпляр String (из-за неизменности, это единственный способ) и изменяетs переменная, так что теперь она ссылается на новый объект.

Ответы на вопрос(5)

Ваш ответ на вопрос