Sobes.tech
Junior

Java'da equals() metodu ne yapar?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da equals() metodu, iki nesneyi eşitlik açısından karşılaştırmak için kullanılır. Varsayılan olarak, Object'ten miras alan ve üzerine yazılmamış nesneler durumunda, nesne referanslarını (==) karşılaştırır, yani değişkenlerin aynı bellek alanına işaret edip etmediğini kontrol eder.

equals() metodunun doğru şekilde yeniden tanımlanması, nesneleri içeriklerine göre karşılaştırmak için önemlidir, bellek konumlarına göre değil.

equals() metodunu yeniden tanımlarken aşağıdaki kurallara uyulmalıdır:

  • Yansıtıcılık: Herhangi bir null olmayan nesne x için, x.equals(x) true döndürmelidir.
  • Simetri: Herhangi bir null olmayan nesne x ve y için, eğer x.equals(y) true ise, y.equals(x) de true olmalıdır.
  • Transitivit: Herhangi bir null olmayan nesne x, y ve z için, eğer x.equals(y) ve y.equals(z) true ise, x.equals(z) de true olmalıdır.
  • Tutarlılık: Herhangi bir null olmayan nesne x ve y için, x.equals(y)'yi tekrar tekrar çağırmak tutarlı sonuçlar vermelidir, bu arada karşılaştırma için kullanılan bilgiler değişmedikçe.
  • Herhangi bir null olmayan nesne x için, x.equals(null) false döndürmelidir.

Genellikle, equals() metodunu yeniden tanımlarken, hashCode() metodunu da yeniden tanımlamak gerekir, ve şu kurala uyulmalıdır: Eğer iki nesne equals() metoduna göre eşitse, onların hashCode() tarafından döndürülen kodları da aynı olmalıdır. Tersine, aynı hash koduna sahip nesnelerin mutlaka eşit olması gerekmez.

Örnek yeniden tanımlama:

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) {
        // Karşılaştırma
        if (this == o) return true;
        // null ve sınıf kontrolü
        if (o == null || getClass() != o.getClass()) return false;
        // Tür dönüşümü ve alanlara göre karşılaştırma
        MyObject myObject = (MyObject) o;
        return value == myObject.value &&
               Objects.equals(name, myObject.name);
    }

    @Override
    public int hashCode() {
        // Alanlara göre hash kodu üretimi
        return Objects.hash(value, name);
    }

    // getterlar, setterlar vb.
}