Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/11/2013, 14:46
usuarioxr
 
Fecha de Ingreso: noviembre-2012
Ubicación: en casa
Mensajes: 150
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: ¿Para que sirve este comando de java "intern()?

Cita:
Iniciado por chuidiang Ver Mensaje
Imagina que tienes dos String iguales así

Código Java:
Ver original
  1. String a = new String ("hola");
  2. String b = new String ("hola");
  3. System.out.println (a==b); // Devuelve false, son zonas de memoria distintas.
  4. 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
  1. // Se crea la cadena "hola" y se registra en la clase String.
  2. String a = new String ("hola").intern();
  3.  
  4. // Se crea la cadena "hola" y como ya está registrada, intern() devuelve la que ya está
  5. // registrada.
  6. String b = new String ("hola").intern();
  7.  
  8. System.out.println (a==b); // Devuelve true, ahora las dos son la misma memoria.
  9. 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.
Por fin alguien que lo explica claramente