Sobes.tech
Junior

Java-da equals() metodu nə edir?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da equals() metodu iki obyekti bərabərliyini müqayisə etmək üçün istifadə olunur. Əsasən, Object-dən miras alan və onu yenidən yazmayan obyektlər üçün, o, obyektlərin istinadlarını (==) müqayisə edir, yəni dəyişənlərin eyni yaddaş sahəsinə işarə edib-etmədiyini yoxlayır.

equals() metodunun düzgün şəkildə yenidən yazılması, obyektləri onların məzmununa görə müqayisə etmək üçün vacibdir, yaddaş yerlərinə görə yox.

equals() metodunu yenidən yazarkən aşağıdakı qaydalara əməl etmək lazımdır:

  • İntizamlılıq: hər hansı null olmayan x obyekti üçün, x.equals(x) true qaytarmalıdır.
  • Simmetriya: hər hansı null olmayan xy obyektləri üçün, əgər x.equals(y) true qaytarırsa, onda y.equals(x)true olmalıdır.
  • Transitivlik: hər hansı null olmayan x, yz obyektləri üçün, əgər x.equals(y)y.equals(z) truedirsə, onda x.equals(z)true olmalıdır.
  • Əlaqəlilik: hər hansı null olmayan xy üçün, çoxsaylı x.equals(y) çağırışları ardıcıl olaraq eyni nəticəni verməlidir, şərti olaraq, müqayisədə istifadə olunan məlumatlar dəyişməyibsə.
  • Hər hansı null olmayan x üçün, x.equals(null) false qaytarmalıdır.

Əksər hallarda, equals() metodunu yenidən yazarkən, hashCode() metodunu da yenidən yazmaq lazımdır, və bu, kontraktı təmin edir: əgər iki obyekt equals()-ə görə bərabərdirsə, onların hashCode()-u da eyni olmalıdır. Əksinə, eyni hashCode()-a sahib obyektlər mütləq bərabər olmalıdır deyildir.

Nümunə:

public class MyObject {
    private int value;
    private String name;

    public MyObject(int value, String name) {
        this.value = value;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        // Öz müqayisəsi
        if (this == o) return true;
        // null və sinif yoxlaması
        if (o == null || getClass() != o.getClass()) return false;
        // Tipə çevirmə və sahələr üzrə müqayisə
        MyObject myObject = (MyObject) o;
        return value == myObject.value &&
               Objects.equals(name, myObject.name);
    }

    @Override
    public int hashCode() {
        // Hash kodunun yaradılması sahələrə əsasən
        return Objects.hash(value, name);
    }

    // getterlər, setterlər və s.
}