Sobes.tech
Junior

Java-da equals() metodu nə edir?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da equals() metodu iki ob'ektning mazmunini taqqoslash uchun ishlatiladi. Standart holda, Object sinfida, u ob'ektlarning havolalarini taqqoslaydi, ya'ni, ikki o'zgaruvchi bir xil xotira ob'ektiga ishora qilayotganligini aniqlaydi.

Biroq, Java'dagi ko'pgina sinflar (masalan, String, Integer) bu metodni qayta belgilaydi, ob'ektlardagi qiymatlarni taqqoslash uchun, havolalar emas.

equals() metodini qayta belgilashda, uning shartnomasiga rioya qilish muhim:

  • Refleksivlik: x.equals(x) har qanday null bo'lmagan x uchun true bo'lishi kerak.
  • Simmetriya: x.equals(y) faqat va faqat y.equals(x) true bo'lsa, true bo'lishi kerak, har qanday null bo'lmagan x va y uchun.
  • Transitivlik: Agar x.equals(y) va y.equals(z) true bo'lsa, x.equals(z) ham true bo'lishi kerak, har qanday null bo'lmagan x, y, z uchun.
  • Konsistensiya: Bir nechta x.equals(y) chaqiruvlari, ob'ektlar o'zgarmagan bo'lsa, bir xil natijani qaytarishi kerak.
  • Har qanday null bo'lmagan x uchun, x.equals(null) false bo'lishi kerak.

equals() metodini qayta belgilash misoli:

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()dan foydalanish:

// Havola bo'yicha taqqoslash (standart Object da)
Object obj1 = new Object();
Object obj2 = new Object();
boolean havolaBilanTaqqoslash = obj1.equals(obj2); // false

// Qiymat bo'yicha taqqoslash (`equals` qayta belgilanganidan so'ng)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean qiymatBilanTaqqoslash = myObj1.equals(myObj2); // true

equals()ni qayta belgilash bilan birga, hashCode() metodini ham qayta belgilash muhim, chunki ularning shartnomasini saqlash va HashMap, HashSet kabi hash asosidagi kolleksiyalar bilan muammolarni oldini olish uchun zarur.