una parte manejo funciones extraer declarar concatenar comparar caracteres cadenas cadena java

parte - funciones string java



¿Cómo debería copiar cadenas en Java? (5)

Como las cadenas son inmutables, ambas versiones son seguras. Este último, sin embargo, es menos eficiente (crea un objeto adicional y en algunos casos copia los datos del personaje).

Con esto en mente, la primera versión debe ser preferida.

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 "hello" (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 para copiar objetos mutables regulares), 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, sobre la base 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 ( s es una referencia a la instancia / objeto)

String backup_of_s = s; crea una nueva variable backup_of_s y la inicializa para que haga referencia al objeto referenciado actualmente por s .

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 elementos no utilizados de Java garantiza que este objeto no se destruirá siempre que esté referenciado por al menos una variable ( backup_of_s en este caso)

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


El segundo caso también es ineficiente en términos de grupo de cadenas, tiene que llamar explícitamente a interno () en la referencia de devolución para hacerlo interno.


Las cadenas son objetos inmutables, por lo que puede copiarlos simplemente haciendo frente a la referencia a ellos, porque el objeto al que se hace referencia no puede cambiar ...

Para que pueda copiar como en su primer ejemplo sin ningún problema:

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


Su segunda versión es menos eficiente porque crea un objeto de cadena adicional cuando simplemente no hay necesidad de hacerlo.

La inmutabilidad significa que su primera versión se comporta de la manera que espera y, por lo tanto, es el enfoque preferido.


String str1="this is a string"; String str2=str1.clone();

¿Qué tal copiar así? Creo que obtener una nueva copia es mejor, de modo que los datos de str1 no se verán afectados cuando str2 sea ​​referencia y se modifique en otra acción.