Cómo comparar Strings en Java
Cómo comprobar si dos textos o Strings son iguales o diferentes en Java.
Existen varias maneras de comparar Strings en Java, y cuál utilicemos dependerá realmente de lo que queramos comparar:
==
va a comparar por referencia y no por valor, es decir, comparará que sean el mismo objeto.equals()
va a comparar por valor y no por referencia, es decir, si dos objetos distintos tienen el mismo valor, esta función devolverá untrue
Vamos a ver algunos ejemplos de cómo comparar Strings en Java:
Comprobar si dos textos son iguales en Java
new String("Un texto").equals("Un texto") // Returns true
new String("Un texto").equals("Otro texto diferente") // Returns false
Pero si utilizamos ==
, veremos que va a devolver un false
. Esto ocurre porque realmente son dos objetos diferentes, por lo que al comparar por referencia y no por valor, Java nos dice que no son iguales:
new String("Un texto") == "Un texto" // Returns false
Si utilizamos ==
para comparar dos Strings recién creados, aunque tengan el mismo valor devolverá false
porque también los estamos comparando por referencia y no por su valor:
new String("Un texto") == new String("Un texto") // Returns false
Sin embargo, si utilizamos ==
para comparar dos cadenas de caracteres sin utilizar el objeto String
, el compilador va a hacer referencia al mismo objeto, por lo que devolverá true
:
"Un texto" == "Un texto" // Returns true
Incluso si concatenamos los textos devolvería true
:
"Un texto" == "Un " + "texto" // Returns true
NullPointerException al comparar Strings en Java
El problema de los métodos anteriores es que si uno de los textos es null
, Java devolverá un NullPointerException
. Debido a esto, lo mejor es utilizar el método Objects.equals()
, el cual antes de hacer una comparación comprueba si alguno de los valores es null
.
Objects.equals("Un texto", new String("Un texto")) // Returns true
Objects.equals(null, "Un texto") // Returns false
Objects.equals(null, null) // Returns true