Sobes.tech
Junior

Java'da equals() metodu ne yapar?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da equals() metodu, iki nesnenin içeriğini karşılaştırmak için kullanılır. Varsayılan olarak, Object sınıfında, nesnelerin referanslarını karşılaştırır, yani iki değişkenin aynı bellek konumundaki nesneye işaret edip etmediğini belirler.

Ancak, Java'daki çoğu sınıf (örneğin, String, Integer) bu metodu, nesnelerin içeriğinde bulunan değerleri karşılaştıracak şekilde yeniden tanımlar, referanslar yerine.

equals() metodunu yeniden tanımlarken, sözleşmesine uygun hareket etmek önemlidir:

  • Yansıtıcılık: x.equals(x) herhangi bir null olmayan x için true olmalıdır.
  • Simetrik: x.equals(y) true olmalı, eğer ve sadece eğer y.equals(x) de true ise, herhangi bir null olmayan x ve y için.
  • Transitivit: Eğer x.equals(y) ve y.equals(z) true ise, x.equals(z) de true olmalıdır, herhangi bir null olmayan x, y ve z için.
  • Tutarlılık: Birden fazla x.equals(y) çağrısı, nesneler değişmediği sürece aynı sonucu döndürmelidir.
  • Herhangi bir null olmayan x için, x.equals(null) false olmalıdır.

equals() metodunun yeniden tanımlanmasına örnek:

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() kullanımı:

// Referans karşılaştırması (varsayılan Object'te)
Object obj1 = new Object();
Object obj2 = new Object();
boolean referanslaKarsilastirma = obj1.equals(obj2); // false

// Değer karşılaştırması (`equals` yeniden tanımlandıktan sonra)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean degerleKarsilastirma = myObj1.equals(myObj2); // true

Ayrıca, equals() metodunu yeniden tanımlarken, hashCode() metodunu da yeniden tanımlamak önemlidir, böylece sözleşmeleri korunur ve HashMap, HashSet gibi hash tabanlı koleksiyonlarda sorunlar önlenir.