Ok, esta pregunta es una extensión de esta pregunta¿No debería hacer `String s = new String (" una nueva cadena ");` en Java, incluso con el interrogatorio automático de cadenas?
Java Strings: "String s = new String("silly");"
La pregunta anterior la misma pregunta como ésta, pero tengo un nuevo punto de dudar.
Según Effective Java
y las respuestas de la pregunta anterior, debemos hacer noString s = new String("a new string");
, porque eso va a crear el objeto innecesario.
No estoy seguro acerca de esta conclusión, porque creo que Java está haciendo automatic string interning, lo que significa que para una cadena, de todos modos solo hay una copia de la misma en la memoria.
Veamos String s = new String("a new string");
.
"a new string"
ya es una cadena que se ha creado en la memoria.
Cuando hago String s = new String("a new string");
, entonces el s
también es "a new string"
. Por lo tanto, de acuerdo con automatic string interning
, s
debe apuntar a la misma dirección de memoria de "a new string"
, ¿verdad?
Entonces, ¿cómo podemos decir que creamos objetos innecesarios?
There * is * solo una copia de String * a menos que haga 'new String (...)' *. No lo hagas a menos que tengas que hacerlo. –
+1 por pregunta interesante, nunca pensé en ello. Sin embargo, la mayor parte del tiempo puede verificar esto examinando las diferencias (o la falta de diferencias) en bytecode entre las 2 versiones. –
'intern'ing solo se ejecuta automáticamente en los literales' String'. – Jeffrey