¿Cómo debo copiar cadenas en Java?

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

En este punto, la variable de copia de seguridad aún contiene el valor original "hola" (esto se debe a la inmutabilidad de String, ¿no?).

Pero es realmenteseguro para copiar cadenas con este método (que por supuesto no es seguro copiar objetos mutables normales), o es mejor escribir esto? :

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

En otras palabras, ¿cuál es la diferencia (si existe) entre estos dos fragmentos?

EDITAR - la razón por la cual el primer fragmento es seguro:

Permítanme explicar las cosas con un poco más de detalle, en función de las buenas respuestas ya proporcionadas (que se centraron esencialmente en la cuestión de la diferencia de rendimiento entre los 2 fragmentos):

Las cadenas son inmutables en Java, lo que significa que un objeto de cadena no se puede modificar después de su construcción. Por lo tanto,

String s = "hello"; crea una nueva instancia de String y asigna su dirección as (s siendo una referencia a la instancia / objeto)

String backup_of_s = s; crea una nueva variablebackup_of_s y lo inicializa para que haga referencia al objeto actualmente referenciado pors.

Nota: la inmutabilidad de la cadena garantiza que este objeto no se modificará: nuestra copia de seguridad es segura

Nota 2: el mecanismo de recolección de basura de Java garantiza que este objeto no se destruirá siempre que se haga referencia a él por lo menos por una variable (backup_of_s en este caso)

Finalmente,s = "bye"; crea otra instancia de String (debido a la inmutabilidad, es la única forma), y modifica las variable para que ahora haga referencia al nuevo objeto.

Respuestas a la pregunta(5)

Su respuesta a la pregunta