Методи equals() дар Java чӣ мекунад?
sobes.tech AI
Ҷавоб аз AI
Раванди equals() дар Java барои муқоиса кардани мазмуни ду объект истифода мешавад. Ба таври пешфарз, дар синфи Object, он истинодҳои объектҳоро муқоиса мекунад, яъне муайян мекунад, ки оё ду тағйирёбанда ба як объект дар хотира ишора мекунанд.
Аммо, бештар синфҳо дар Java (масалан, String, Integer) ин методро такмил медиҳанд, то арзишҳои дар объектҳо нигоҳ доштаашударо муқоиса кунанд, на истинодҳоро.
Ҳангоми такмил додани equals(), муҳим аст, ки шартномаи онро риоя кунед:
- Рефлексивӣ:
x.equals(x)бояд барои ҳар якxки нол нест,trueбошад. - Симметрӣ:
x.equals(y)боядtrueбошад, агар ва танҳо агарy.equals(x)trueбошад, барои ҳамаxваyки нол нестанд. - Транзитивӣ: Агар
x.equals(y)ваy.equals(z)trueбошанд, пасx.equals(z)низ боядtrueбошад, барои ҳамаx,y,zки нол нестанд. - Мустаҳкамӣ: Иҷрои чандкаратаи
x.equals(y)бояд натиҷаи якхела диҳад, то ҳол ки объектҳо тағир наёфта бошанд. - **Барои ҳар як
xки нол нест,x.equals(null)боядfalseбошад.
Масалан, такмил додани 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;
}
}
Истифодаи equals():
// муқоиса бо истинод (аз пешфарз дар Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean боИстинод = obj1.equals(obj2); // false
// муқоиса бо арзиш (пас аз такмил додани `equals`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean боАрзиш = myObj1.equals(myObj2); // true
Ҳамчунин, муҳим аст, ки вақте equals() такмил дода мешавад, методи hashCode() низ такмил дода шавад, то шартномаи онҳоро нигоҳ дорад ва мушкилот бо коллекияҳое, ки асос ёфтаанд ба hashing, мисли HashMap, HashSet, пешгирӣ шавад.