Sobes.tech
Junior

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 x uchun, x.equals(x) true bo'lishi kerak.
  • Simmetriya: Har qanday null bo'lmagan x va y uchun, x.equals(y) true bo'lsa, y.equals(x) ham true bo'lishi kerak.
  • Transitivlik: Har qanday null bo'lmagan x, y va z uchun, agar x.equals(y) va y.equals(z) true bo'lsa, x.equals(z) ham true bo'lishi kerak.
  • Moslik: Har qanday null bo'lmagan x va y uchun, x.equals(y) ni takroriy chaqirishlar, ob'ektlar o'zgarmagan bo'lsa, doimiy ravishda true yoki false qaytarishi kerak.
  • Har qanday null bo'lmagan x uchun, x.equals(null) false bo'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);
    }
}