Tips para Comparación de Cadenas en Java

Hay algunas consideraciones que debes tomar en cuenta a la hora hacer comparación de cadenas en Java. Te mostraremos algunos ejemplos. Puede parecer que algunas formas son correctas o incorrectas, pero si sabes como funcionan todas pueden ser útiles dependiendo de las circunstancias.

"cadena" == "cadena"
"cadena" == "cad" + "ena"
"cadena" == "-cadena".substring(1)
new String("cadena").equals("cadena")
new String("cadena") == new String("cadena")
"cadena".equals(variableCadena)

La siguiente expresión compara dos direcciones, el compilador se encarga de hacer que ambos objetos sean el mismo y por lo tanto tengan también la misma dirección.

"cadena" == "cadena"
Da como resultado true.  Porque el operador «==» compara direcciones.


Cuando se concatenan cadenas usando el operador «+» el compilador se encarga de la concatenación y la comparación que resulta es sobre la dirección de dos objetos que en realidad son el mismo, el resultado es igual al del ejemplo anterior.
"cadena" == "cad" + "ena"
La expresión devuelve true.  En tiempo de ejecución se trata del mismo objeto.
Cuando el método substring es usado se genera un objeto diferente (aunque tenga el mismo valor).
"cadena" == "-cadena".substring(1)
La expresión devuelve false.
No solo substring devuelve objetos diferentes, también se pueden obtener objetos diferentes (pero conteniendo los mismos caracteres) cuando la cadena proviene de una fuente externa como un archivo.

En la siguiente expresión el método equals compara el valor de dos objetos String.

new String("cadena").equals("cadena")
El resultado es true.
Sin embargo, no se trata de dos objetos con la misma dirección, si se comparan con el operador «==» el resultado es false.
new String("cadena") == "cadena"
Por la misma razón la siguiente expresión también devuelve false.
new String("cadena") == new String("cadena")

Una forma de comparar cadenas con variables y que evita que el riesgo de lanzar un NullPointerException si la variable a comparar es nula es de la siguiente forma:

"cadena".equals(variableCadena)

Donde el valor  de la variable variableCadena puede asignarse de otra sección de código, si su valor es null, la expresión devolverá false si el valor de la variable variableCadena es «cadena», devolverá true.

 

2 comentarios en «Tips para Comparación de Cadenas en Java»

Deja un comentario

ninety six − 94 =