En este post, discutiremos la diferencia entre el operador == y el método equals() en Java.
El ==
es un operador relacional en Java que se utiliza para comparar tipos primitivos como int, double, char, float, etc. No debe usarse para comparar dos referencias a objetos ya que para cualquier valor de referencia no nulo x e y, x == y
devuelve verdadero sólo cuando x e y se refieren al mismo objeto.
equals()
, por otro lado es un método en la clase Object
que se utiliza para comparar objetos. Se comporta de forma similar al operador ==
si no es anulado por una clase. Cada clase debe sobrescribir el método equals()
de la clase Object
y especificar la relación de equivalencia de los objetos. La relación de equivalencia debe ser tal que los métodos equals()
evalúen la comparación de valores en los objetos independientemente de que los dos objetos se refieran a la misma instancia o no. Dado que los objetos iguales deben tener códigos hash iguales, es necesario anular el método hashCode()
también.
Dado que String es un objeto en Java, siempre debemos utilizar el método equals()
para comparar dos cadenas en Java. Esto funciona ya que la clase String
sobrescribe el método equals()
de la clase Object
.
Como es evidente en el programa anterior, la comparación de dos cadenas utilizando el método ==
y equals()
devuelve una salida diferente. Esto se debe a que ==
está realizando una comparación de referencias, es decir, comparando si dos variables se refieren al mismo objeto o no. Como estamos creando dos nuevos objetos String
utilizando el constructor String
, no compartirán la misma referencia y s1 == s2
devuelve falso. Por lo tanto, nunca debemos usar el operador ==
para comparar dos cadenas.
Por otro lado, el método equals()
de la clase String
compara el contenido de la matriz de caracteres respaldada y devuelve un valor booleano como resultado de la comparación.
Sin embargo, el código siguiente da resultados diferentes. Esto es porque los literales de cadena se almacenan en la piscina constante de cadena, y ambos s1 & s2 compartirá la misma referencia. Así que s1 == s2
devuelve true.
(6 votos, media: 5.00 sobre 5)
Gracias por leer.