Comparar cadenas de carácteres

3175 vistas

Antes de intentar comparar dos cadenas de carácteres, tenemos que entender que el operador '==' permite comparar los tipos primitivos entre ellos (int, float, boolean, etc. ), pero en el caso de los objetos, este operador compara los emplazamientos en memoria de los objetos y, hay que entender que, dos objetos inicializados con los mismos parámetros ocupan dos espacios de memoria diferentes, por lo que serán diferentes desde el punto de vista del operador '=='.

La operación que permite comparar objetos entre ellos es el método equals() de java.lang.Object.



java
  1. String a = "cadena";
  2. String b = "cadena";
  3. String c = "otra cadena";
  4. String d = c;
  5. a==b;
  6. /** FALSE, a y b son instancias diferentes de String.
  7.  * Este resultado es teórico ya que algunos compiladores pueden optimizar el código para
  8.  * crear una sola instancia en memoria
  9.  */
  10. a.equals(b);
  11. // TRUE, equals() compara las cadenas carácter a carácter
  12. c==d;
  13. // TRUE, c y d representan la misma instancia de memória de String



JDK 1.4, método 'intern()'
El JDK 1.4 complica algo las cosas al consercar una lista privada de instancias de String. Inicialmente, la lista está vacÃa. La llamada del método intern() busca en la lista si una instancia es igual como lo harÃa 'equals()'. Si la encuentra, devuelve esta instancia, sino, se adjunta la cadena a la lista.



java
  1. String a = "cadena"; // 1era instancia
  2. String b = "cadena"; // 2da instancia
  3. a=a.intern(); // la instancia 1 se añade a la lista, 'a' no cambia de valor
  4. b = b.intern(); // equivalente a: b = a;
  5. a==b; // TRUE