String s = "hello";
String backup_of_s = s;
s = "bye";
En este punto, la variable de copia de seguridad todavía contiene el valor original "hola" (esto se debe a la inmutabilidad de String, ¿verdad?).
Pero, ¿es realmente seguro 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 la hay) 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 String 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 a s( ssiendo una referencia a la instancia / objeto)
String backup_of_s = s;crea una nueva variable backup_of_sy la inicializa para que haga referencia al objeto al que hace referencia actualmente s.
Nota: la inmutabilidad de 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 y cuando se haga referencia al menos a una variable ( backup_of_sen este caso)
Finalmente, s = "bye";crea otra instancia de String (debido a la inmutabilidad, es la única forma) y modifica la svariable para que ahora haga referencia al nuevo objeto.