Java equals Yöntemi Kullanımı: Nesne Karşılaştırma Kontrolü

Posted by

Java programlama dilinde, equals() yöntemi, nesnelerin içeriğini karşılaştırmak için kullanılan önemli bir yöntemdir. Bu yöntem, Object sınıfından türetilmiş olan tüm sınıflarda mevcuttur. Ve nesnelerin değerlerine göre eşit olup olmadığını kontrol eder. Ancak varsayılan olarak, Object sınıfındaki equals() yöntemi referans karşılaştırması yapar. Yani iki nesnenin aynı bellek konumunu gösterip göstermediğini kontrol eder. Bu yazıda, equals() yönteminin nasıl kullanıldığını, nasıl özelleştirilebileceğini ve anlamlı eşitlik kontrolü için nelere dikkat edilmesi gerektiğini örneklerle açıklayacağız.

java equals kullanımı

equals() Yöntemini İnceleme

Java’da equals() yöntemi, Object sınıfından türetilen tüm sınıflarda kullanılabilmektedir. Yöntemi şu şekilde kullanabiliriz:

public boolean equals(Object obj) {
    // Eşitlik kontrolü için gerekli işlemler
}

equals() yöntemi, parametre olarak bir nesne alır ve bu nesnenin mevcut nesneyle eşit olup olmadığını kontrol eder. Varsayılan olarak, bu yöntem referans karşılaştırması yapar ve iki nesnenin aynı bellek konumunu gösterip göstermediğini kontrol eder. Ancak, özelleştirilmiş sınıflarda bu yöntemi değer karşılaştırması için uyarlayabiliriz.

Java equals() Yöntemini Özelleştirme

  1. Eğer kendi sınıfımızda equals() yöntemini özelleştirmek istiyorsak, aşağıdaki adımları takip edebiliriz:
  • equals() yöntemini sınıfımızda @Override anotasyonu ile belirtmeliyiz.
  • Yöntem içinde, gelen obje parametresinin sınıfımıza uygun olup olmadığını kontrol etmeliyiz. Bu genellikle instanceof anahtar kelimesi ile yapılmaktadır.
  • Daha sonra, obje parametresini sınıfımıza uygun bir tipe dönüştürmeliyiz.
  • Son olarak, nesnelerin içeriklerini karşılaştırmalı ve sonuç olarak true veya false dönmeliyiz.

Örnek olarak, bir Kitap sınıfı düşünelim ve bu sınıfta equals() yöntemini özelleştirelim:

public class Kitap {
    private String isim;
    private String yazar;

    // Constructor, getter ve setter metotları

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Kitap)) {
            return false;
        }

        Kitap other = (Kitap) obj;
        return this.isim.equals(other.isim) && this.yazar.equals(other.yazar);
    }
}

Anlamlı Eşitlik Kontrolü

Java equals() yöntemini özelleştirirken, anlamlı eşitlik kontrolü için nesnelerin hangi özelliklerini karşılaştıracağımıza dikkat etmemiz gerekir. Örneğin, Kitap sınıfı için equals() yönteminde sadece kitap isimleri ve yazarlarına göre eşitlik kontrolü yaptık. Bu sayede iki kitabın isimleri ve yazarları aynı olduğunda, nesneler eşit kabul edilmektedir. Ancak, nesnelerin diğer özelliklerini de dikkate almak gerekebilmektedir.

Örnek olarak, iki kitabın yayın tarihlerini ve yayınevlerini de karşılaştırabilir. Ve sadece tüm özelliklerin aynı olduğu durumda nesneleri eşit kabul edebiliriz.

Java Equals Kullanımına Örnek

public class Ogrenci {
    private int ogrenciNo;
    private String ad;
    private String soyad;

    public Ogrenci(int ogrenciNo, String ad, String soyad) {
        this.ogrenciNo = ogrenciNo;
        this.ad = ad;
        this.soyad = soyad;
    }

    // Getter ve Setter metotları

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Ogrenci)) {
            return false;
        }

        Ogrenci other = (Ogrenci) obj;
        return this.ogrenciNo == other.ogrenciNo
                && this.ad.equals(other.ad)
                && this.soyad.equals(other.soyad);
    }
}

Yukarıdaki örnekte, Ogrenci adında bir sınıf tanımlıyoruz. Ve bu sınıfta öğrenci numarası (ogrenciNo), ad (ad) ve soyad (soyad) olmak üzere üç özellik bulunmakta. Equals() yöntemini, öğrenci numarası, ad ve soyadına göre özelleştiriyoruz. Eğer iki öğrenci nesnesi aynı öğrenci numarasına, aynı ad ve aynı soyada sahipse, equals() yöntemi true değerini döndürecektir ve bu iki öğrenciyi eşit olarak kabul edecektir.

Aşağıda, bu öğrenci sınıfını kullanarak örnek bir senaryo göstereceğiz:

public class TestOgrenci {

    public static void main(String[] args) {
        Ogrenci ogrenci1 = new Ogrenci(12345, "Ahmet", "Yılmaz");
        Ogrenci ogrenci2 = new Ogrenci(67890, "Mehmet", "Kaya");
        Ogrenci ogrenci3 = new Ogrenci(12345, "Ahmet", "Yılmaz");

        System.out.println("Öğrenci 1 ve Öğrenci 2 Eşit mi? " + ogrenci1.equals(ogrenci2));
        System.out.println("Öğrenci 1 ve Öğrenci 3 Eşit mi? " + ogrenci1.equals(ogrenci3));
    }
}

Çıktı;

Öğrenci 1 ve Öğrenci 2 Eşit mi? false
Öğrenci 1 ve Öğrenci 3 Eşit mi? true

Görüldüğü gibi, ogrenci1 ve ogrenci3 nesneleri öğrenci numarası, ad ve soyadları açısından eşit olduğu için equals() yöntemi true değerini döndürüyor. Ve bu iki öğrenciyi eşit olarak kabul ediyoruz. Diğer yandan, ogrenci1 ve ogrenci2 nesneleri farklı öğrenci numaralarına ve farklı ad-soyağa sahip olduğu için equals() yöntemi false değerini döndürüyor. Ve bu iki öğrenciyi eşit olarak kabul etmiyoruz.

Bu yazıda, Java’da equals() yönteminin ne olduğunu, nasıl kullanıldığını ve nasıl özelleştirilebileceğini anlattık. Varsayılan olarak, Object sınıfında bulunan equals() yöntemi referans karşılaştırması yapar. Ve iki nesnenin aynı bellek konumunu gösterip göstermediğini kontrol eder. Ancak, özel sınıflarda bu yöntemi değer karşılaştırması için uyarlama ihtiyaç doğabilmektedir. Bu durumda, sınıfımızda equals() yöntemini @Override anotasyonu ile özelleştirebilir. Ayrıca nesnelerin içeriklerine göre eşitlik kontrolü yapabiliriz.

Özellikle koleksiyonlar gibi veri yapılarında, nesnelerin anlamlı eşitlik kontrolünü sağlamak önemlidir. Bu nedenle, equals() yöntemini özelleştirirken, nesnenin hangi özelliklerinin eşitlik kontrolünde dikkate alınacağını iyi belirlemeliyiz. Birden çok özelliğin eşitliği kontrolünde kullanılması gerekiyorsa, tüm özelliklerin eşit olduğu durumda nesneleri eşit kabul edecek şekilde yöntemi uyarlamak önemlidir.

equals() yöntemi, Java’da nesne karşılaştırmalarında sıkça kullanılan ve mantıklı sonuçlar elde etmek için dikkatlice ele alınması gereken önemli bir yöntemdir. Özellikle sınıflarımızı koleksiyonlarda veya veri yapılarında kullanırken, equals() yöntemini doğru şekilde özelleştirmek ve anlamlı eşitlik kontrolü yapmak, veri işlemlerimizi doğru ve tutarlı kılar. Ayrıca java kodlarını denemek için jdoodle.com u kullanabilirsiniz.

Java ArrayList Kullanımı ve Örnekleri için Tıklayınız.

İlginizi Çekebilir

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir