Ko dara metode equals() Java?
sobes.tech AI
Atbilde no AI
Java equals() metode tiek izmantots divu objektu vienādības salīdzināšanai. Noklusējuma gadījumā, gadījumā, ja objekti manto no Object bez tā pārrakstīšanas, tas salīdzina atsauces uz objektu (==), tas ir, pārbauda, vai mainīgie norāda uz to pašu atmiņas vietu.
Pareiza equals() metodes pārrakstīšana ir svarīga, lai salīdzinātu objektus pēc to satura, nevis pēc to atrašanās vietas atmiņā.
Pārrakstot equals(), jāievēro šādi noteikumi:
- Refleksivitāte: jebkuram nullei līdzīgam
xobjektam,x.equals(x)jāatgriežtrue. - Simetrija: jebkuriem
xunyobjektiem, jax.equals(y)atgriežtrue, tad arīy.equals(x)jāatgriežtrue. - Transitivitāte: jebkuriem
x,yunzobjektiem, jax.equals(y)uny.equals(z)abi irtrue, tad arīx.equals(z)jābūttrue. - Konsistence: jebkuriem
xunyobjektiem, atkārtoti izsaucotx.equals(y), jāatgriež tas pats rezultāts, ja informācija, kas tiek izmantota salīdzinājumam, nav mainījusies starp izsaukumiem. - Nulla: jebkuram
xobjektam,x.equals(null)jāatgriežfalse.
Parasti, pārrakstot equals(), ir nepieciešams arī pārrakstīt hashCode() metodi, ievērojot kontraktu: ja divi objekti ir vienādi pēc equals(), tad to hashCode() vērtības ir jābūt vienādām. Atgriezeniskā saite nav obligāta: ja hashCode() ir vienādi, objekti var nebūt vienādi.
Piemērs pārrakstīšanai:
public class MyObject {
private int value;
private String name;
public MyObject(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Pārbaude
if (this == o) return true;
// Pārbaude null un tipa
if (o == null || getClass() != o.getClass()) return false;
// Tipa konvertēšana un salīdzināšana pēc laukiem
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Hash koda ģenerēšana pēc laukiem
return Objects.hash(value, name);
}
// geteri, seteri un t.t.
}