Java'da equals() metodi nima qiladi?
sobes.tech AI
AIdan javob
Java'da equals() metodi, ikki ob'ektni tengligini taqqoslaydi.
Standart holda, Object bazaviy sinfida, equals() ning amalga oshirilishi == operatoriga teng bo'lib, u ikki o'zgaruvchining xotirada bir xil ob'ektni anglatishini tekshiradi.
Biroq, ko'plab foydalanuvchi tomonidan belgilangan sinflar, masalan, satrlar (String) yoki kolleksiyalar, bu metodni ustunlik bilan yozib, ob'ektlarni ularning mazmuni bo'yicha (mantiqiy tenglik) taqqoslash uchun o'zgartiriladi, referenslar emas.
equals() metodini qayta yozishda, quyidagi xususiyatlarga rioya qilish muhim:
- Refleksivlik: Har qanday null bo'lmagan
xuchun,x.equals(x)truebo'lishi kerak. - Simmetriya: Har qanday null bo'lmagan
xvayuchun,x.equals(y)truebo'lsa,y.equals(x)hamtruebo'lishi kerak. - Transitivlik: Har qanday null bo'lmagan
x,yvazuchun, agarx.equals(y)vay.equals(z)truebo'lsa,x.equals(z)hamtruebo'lishi kerak. - Moslik: Har qanday null bo'lmagan
xvayuchun,x.equals(y)ni takroriy chaqirishlar, ob'ektlar o'zgarmagan bo'lsa, doimiy ravishdatrueyokifalseqaytarishi kerak. - Har qanday null bo'lmagan
xuchun,x.equals(null)falsebo'lishi kerak.
Shuningdek, equals() ni qayta yozishda, hashCode() metodini ham qayta yozish muhim, chunki ular bir-biri bilan bog'liq. Agar ikki ob'ekt equals() bo'yicha teng bo'lsa, ularning hashCode() qiymatlari ham teng bo'lishi kerak.
Oddiy sinf uchun equals() ni qayta yozish misoli:
public class MyClass {
private int id;
private String name;
public MyClass(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
return id == myClass.id &&
Objects.equals(name, myClass.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}