Java’da == ve equals() Farkı – Java Dersleri

1
6984
Java == ve equals() Farkı - Java Dersleri
Java == ve equals() Farkı - Java Dersleri

İş mülakatlarında en çok karşılaşabileceğiniz soru tiplerinden biri de Java’daki == ile equals() metot farkı olacaktır. Hadi o zaman, size == ve equals() farkını açıklayalım.

1- Equals() ve == arasında temek fark, birinin metot diğerinin operator olmasıdır.

2- == operatörünü referans karşılaştırması (reference) (address comparison) için ve equals() metotunu içerik karşılaştırması için kullanırız. Basitçe söylemek gerekirse, == her iki nesnenin aynı bellek konumuna işaret edip etmediğini denetlerken, .equals() nesnelerdeki değerlerin karşılaştırılmasını değerlendirir.

Detaylıca anlamak için örnek bir kod alanı koyuyorum:

public class KampusKod {
	
	public static void main(String[] args) {
		String s1 = "KAMPUSKOD";
		String s2 = "KAMPUSKOD";
		String s3 = new String("KAMPUSKOD");
		String s4 = new String("KAMPUSKOD");
		
		System.out.println(s1 == s2);
		System.out.println(s1.equals(s2));
		System.out.println(s3 == s4);
		System.out.println(s3.equals(s4));
	}

}

Kod Çıktısı:

true
true
false
true

İlk olarak String s1 kullanımı açıklayalım. String s1 = “text”; kullanımı, eğer varsa, string sabit havuzunda (string constant pool) bir örneği yeniden kullanır. Yoksa havuz içerisinde yeniden alan oluşturur. Bu durum Java’ya özgü Java Sanal Makinesi (JVM) tarafından gerçekleştirilen bir durumdur.

Şimdi Kod çıktımızı inceleyebiliriz:

  • s1 ve s2 String constant pool içerisinde aynı referansa (reference) sahiptir. s3 ve s4 ise farklı nesneleri ifade eder.
  • s1 == s2 , s1 ve s2 ‘nin hafızadaki adres değerlerini karşılaştırır ve yukarıdaki açıklamamıza göre String constant pool üzerinde aynı adresi gösterirler. Böylece ekrana TRUE yazdırır.
  • s1.equals(s2) ifadesi ise, nesneler içerisindeki değerleri (KAMPUSKOD) karşılaştırdığı için ekrana TRUE yazdırır.
  • Bildiğimiz gibi == operatörü hafızadaki adresleri karşılaştırır, s3 ve s4 birbirinden farklı nesneler oldukları için farklı adreslerde tutulurlar. Bu yüzden s3 == s4 ifadesi ekrana FALSE yazdırır.
  • s3.equals(s4) ifadesi ise, nesneler içerisindeki değerleri (KAMPUSKOD) karşılaştırdığı için ekrana TRUE yazdırır.

Anlattıklarımın hepsini aşağıdaki şekil üzerinde kısaca özetledim.

Umarım yazım sizin için faydalı ve yeterince açıklayıcı olmuştur. Java mülakatlarınızda başarılar dilerim.

1 Yorum

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz