Imagina que tienes dos String iguales así
Código Java:
Ver originalSystem.
out.
println (a
==b
); // Devuelve false, son zonas de memoria distintas. System.
out.
println(a.
equals(b
)); // Devuelve true, ambas cadenas contienen lo mismo.
Los dos String contienen lo mismo, la cadena "hola", pero ocupan cada uno una zona distinta de memoria, ya que se han hecho dos news. Puesto que un String no se puede cambiar (String no tiene métodos para cambiar su contenido), es un desperdicio de memoria.
Para evitar esto, String mantiene dentro una lista de textos de forma que si el texto ya existe, te devuelve la zona de memoria de ese texto y si no existe, lo añade. La forma de añadirlo o obtener esta cadena almacenada es llamando al método intern(). El mismo ejemplo anterior
Código Java:
Ver original// Se crea la cadena "hola" y se registra en la clase String.
// Se crea la cadena "hola" y como ya está registrada, intern() devuelve la que ya está
// registrada.
System.
out.
println (a
==b
); // Devuelve true, ahora las dos son la misma memoria. System.
out.
println(a.
equals(b
)); // Devuelve true, ambas cadenas contienen lo mismo, realmente son la misma zona de memoria.
Temporalmente, se reserva memoria dos veces, ya que se hacen dos new String("hola"), pero el segundo new lo recoge el recolector de basura, ya que no nos guardamos ninguna referencia a el. El segundo new String("hola").intern() nos devuelve el String que creamos en la primera línea y asignamos a la variable a.
Se bueno.