Uno de los problemas más comunes en programación es encontrarnos con dos posibilidades de uso de cualquier variable, patrón, framework etc y que no sepamos cuál elegir por falta de información. Tal es el caso de == y de equals en Java. Pero no te preocupes, si no sabes distinguir entre uno y otro, hoy te enseñamos qué es el equals en Java y cuál es la diferencia que guarda con el ==.
¿Qué es el método equals en Java?
El método equals() es una función que se hereda de la clase Object y que está presente en todas las clases de Java. Dicho método tiene como objetivo comparar si dos objetos son equivalentes a nivel de contenido, no a nivel de referencia en memoria. Es decir, puede verificar si los atributos de dos instancias de una clase son iguales o no.
Diferencia entre ==
y equals()
==
: Este primero compara si dos referencias apuntan al mismo objeto en la memoria. Se puede usar para comparar tipos primitivos comoint
,boolean
,char
, etc.equals()
: Compara si el contenido de dos objetos es equivalente. Esto es más útil en el caso de comparar objetos que pueden tener los mismos valores, pero que son instancias diferentes.
Por ejemplo, tenemos el siguiente código:
Persona p1 = new Persona("Juan");
Persona p2 = new Persona("Juan");
System.out.println(p1 == p2); // false, porque apuntan a diferentes objetos en memoria
System.out.println(p1.equals(p2)); // true, si equals está sobrescrito para comparar los nombres
Para este caso, inclusive si p1 y p2 son dos objetos distintos, pueden considerarse iguales, solo si comparamos el atributo nombre de cada uno, algo que podemos hacer con equals en Java.
¿Cuándo deberías usar ==
?
El operador ==
es más útil cuando estamos trabajando con tipos primitivos. Por ejemplo:
int a = 5;
int b = 5;
System.out.println(a == b); // true, porque los valores de a y b son iguales
Para este caso ambos valores son iguales, por lo que a == b y devuelve true. No obstante, cuando se trata de objetos, == solo compara si las referencias son idénticas, es decir, si ambas variables apuntan al mismo lugar en la memoria.
Cuando comparas objetos con ==
, lo que estás haciendo es verificar si ambos referencian al mismo objeto. Por ejemplo:
Persona p1 = new Persona("Pedro");
Persona p2 = p1;
System.out.println(p1 == p2); // true, ambos apuntan al mismo objeto
En este caso, p1
y p2
apuntan al mismo objeto en memoria, por lo que ==
devolverá true
.
¿Cuándo deberías usar equals en Java?
Si tenemos objetos más complejos, como cadenas de texto o instancias de clases personalizadas, es mucho más práctico usar el método equals () para hacer las comparaciones basadas en el contenido del objeto y no en su ubicación en la memoria. Veamos un ejemplo:
Veamos un ejemplo en el que sobrescribimos el método equals()
para comparar el contenido de dos objetos Persona
:
public class Persona {
private String nombre;
public Persona(String nombre) {
this.nombre = nombre;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Persona persona = (Persona) obj;
return Objects.equals(nombre, persona.nombre);
}
}
En este código sobreescribimos el método equals en Java para que dos objetos Persona
se consideren iguales si su atributo nombre
es el mismo. Ahora podemos hacer una comparación más significativa:
Persona p1 = new Persona("Maria");
Persona p2 = new Persona("Maria");
System.out.println(p1.equals(p2)); // true, porque ambos tienen el mismo nombre
Entonces, ¿cuándo usar ==
y cuándo usar equals()
?
Escenario | Usar == | Usar equals() |
---|---|---|
Comparar tipos primitivos | Sí | No |
Comparar referencias a objetos | Sí | No |
Comparar el contenido de los objetos | No | Sí (sobrescribe equals() si es necesario) |
Si te interesó la temática sobre equals en Java y quieres seguir aprendiendo sobre este lenguaje, no dudes en escribirnos y preguntar por el bootcamp sobre java, en el cual aprenderás toda la fundamentación teórica y práctica que te permitirá incursionar en un mercado laboral cada vez más competitivo. ¡No esperes más tu gran oportunidad!