Javaда equals() ыкмасы эмне кылат?
sobes.tech AI
AIден жооп
Javaда equals() ыкмасы эки объекттин мазмунун салыштыруу үчүн колдонулат. Деги, эгер эч кандай өзгөртүүлөр жасалбаса, 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 byReference = obj1.equals(obj2); // false
// маанини салыштыруу (өзгөртүлгөн `equals` аркылуу)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean byValue = myObj1.equals(myObj2); // true
Мындан тышкары, hashCode() ыкмасын да кайра аныктоо маанилүү, анткени ал equals() менен шарттарды сактап, хештөө колдонмолорунда (мисалы, HashMap, HashSet) туура иштешин камсыз кылат.