Junior
Co dělá metoda equals() v Java?
sobes.tech AI
Odpověď od AI
Metoda equals() v Javě se používá ke srovnání obsahu dvou objektů. Ve výchozím nastavení, v třídě Object, porovnává odkazy na objekty, tj. určuje, zda dvě proměnné odkazují na stejný objekt v paměti.
Nicméně, většina tříd v Javě (například String, Integer) tuto metodu přepisuje tak, aby porovnávala hodnoty obsažené v objektech, nikoli jejich odkazy.
Při přepisování equals() je důležité dodržovat její kontrakt:
- Reflexivita:
x.equals(x)by mělo býttruepro jakýkoli nenulovýx. - Symetrie:
x.equals(y)by mělo býttrueprávě tehdy, kdyžy.equals(x)jetrue, pro všechny nenulovéxay. - Transitivita: Pokud jsou
x.equals(y)ay.equals(z)true, pak by mělo býtx.equals(z)takétruepro všechny nenulovéx,y,z. - Konzistence: Vícenásobné volání
x.equals(y)by mělo vracet stejný výsledek, pokud se objekty nezměnily. - **Pro jakékoli nenulové
x, byx.equals(null)mělo býtfalse.
Příklad přepsání 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žití equals():
// Porovnání podle odkazu (výchozí v Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean podleOdkazu = obj1.equals(obj2); // false
// Porovnání podle hodnoty (po přepsání `equals`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean podleHodnoty = myObj1.equals(myObj2); // true
Je také důležité přepsat metodu hashCode(), když přepisujete equals(), aby byl zachován jejich kontrakt a předešlo se problémům s kolekcemi založenými na hashování, například HashMap, HashSet.