Junior
¿Qué hace el método equals() en Java?
sobes.tech AI
Respuesta de la IA
El método equals() en Java se utiliza para comparar el contenido de dos objetos. Por defecto, en la clase Object, compara las referencias de los objetos, es decir, determina si dos variables apuntan al mismo objeto en la memoria.
Sin embargo, la mayoría de las clases en Java (por ejemplo, String, Integer) redefinen este método para comparar los valores contenidos en los objetos, en lugar de sus referencias.
Al redefinir equals(), es importante seguir su contrato:
- Reflexividad:
x.equals(x)debe sertruepara cualquierxno nulo. - Simetría:
x.equals(y)debe sertruesi y solo siy.equals(x)estruepara cualquierxyyno nulos. - Transitividad: Si
x.equals(y)yy.equals(z)sontrue, entoncesx.equals(z)también debe sertruepara cualquierx,yyzno nulos. - Consistencia: Múltiples llamadas a
x.equals(y)deben devolver el mismo resultado, siempre que los objetos no cambien. - Para cualquier
xno nulo,x.equals(null)debe serfalse.
Ejemplo de redefinición de equals():
class MyObject {
private int value;
public MyObject(int value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
MyObject myObject = (MyObject) obj;
return value == myObject.value;
}
}
Uso de equals():
// Comparación por referencia (por defecto en Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean byReference = obj1.equals(obj2); // false
// Comparación por valor (en `equals` redefinido)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean byValue = myObj1.equals(myObj2); // true
También es importante redefinir el método hashCode() al redefinir equals(), para mantener su contrato y evitar problemas con colecciones que utilizan hashing (por ejemplo, HashMap, HashSet).