Como devo copiar Strings em Java?

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

Neste ponto, a variável de backup ainda contém o valor original "hello" (isso é devido ao direito de imutabilidade do String?).

Mas isso é realmenteseguro para copiar Strings com este método (que obviamente não é seguro para copiar objetos mutáveis ​​regulares), ou é melhor escrever isto? :

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

Em outras palavras, qual é a diferença (se houver) entre esses dois trechos?

EDIT - a razão pela qual o primeiro snippet é seguro:

Deixe-me explicar as coisas com um pouco mais de detalhes, com base nas boas respostas já fornecidas (que eram essencialmente focadas na questão da diferença de desempenho entre os dois trechos):

As strings são imutáveis ​​em Java, o que significa que um objeto String não pode ser modificado após sua construção. Conseqüentemente,

String s = "hello"; cria uma nova instância de String e atribui seu endereço as (s sendo uma referência para a instância / objeto)

String backup_of_s = s; cria uma nova variávelbackup_of_s e inicializa-o para que ele faça referência ao objeto atualmente referenciado pors.

Nota: A imutabilidade da string garante que este objeto não será modificado: nosso backup é seguro

Nota 2: O mecanismo de coleta de lixo Java garante que este objeto não será destruído desde que seja referenciado por pelo menos uma variável (backup_of_s nesse caso)

Finalmente,s = "bye"; cria outra instância String (por causa da imutabilidade, é a única maneira), e modifica os variável para que agora faça referência ao novo objeto.

questionAnswers(5)

yourAnswerToTheQuestion