Junior
Čo robí metóda equals() v Jave?
sobes.tech AI
Odpoveď od AI
Metóda equals() v Jave sa používa na porovnanie obsahu dvoch objektov. Predvolene, v triede Object, porovnáva referencie na objekty, teda určuje, či dve premenné ukazujú na ten istý objekt v pamäti.
Avšak, väčšina tried v Jave (napríklad String, Integer) túto metódu prepíše tak, aby porovnávala hodnoty obsiahnuté v objektoch, nie ich referencie.
Pri prepísaní equals() je dôležité dodržiavať jeho zmluvu:
- Reflexivita:
x.equals(x)by malo byťtruepre akékoľvek nenulovéx. - Symetria:
x.equals(y)by malo byťtrueak a len aky.equals(x)jetrue, pre všetky nenulovéxay. - Transitivita: Ak sú
x.equals(y)ay.equals(z)true, takx.equals(z)by malo byťtruepre všetky nenulovéx,y,z. - Konzistentnosť: Viacnásobné volania
x.equals(y)by malo vracať rovnaký výsledok, pokiaľ sa objekty nezmenili. - **Pre akékoľvek nenulové
x,x.equals(null)by malo byťfalse.
Príklad prepísania 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;
}
}
Použitie equals():
// Porovnanie podľa odkazu (štandardne v Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean podlaOdkazu = obj1.equals(obj2); // false
// Porovnanie podľa hodnoty (po prepísaní `equals`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean podlaHodnoty = myObj1.equals(myObj2); // true
Je tiež dôležité prepísať metódu hashCode(), keď prepíšete equals(), aby ste zachovali ich zmluvu a predišli problémom s kolekciami založenými na hashovaní, ako sú HashMap, HashSet.