Cómo comparar Strings en Java

Cómo comprobar si dos textos o Strings son iguales o diferentes en Java.

Cómo comparar Strings 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á un true

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