İş 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.
- İrlanda Öğrenci Vizesi için Gerekli Belgeler
- (Solved) Error ‘npm ERR! ERESOLVE unable to resolve dependency tree’ and & How to fix NPM warnings
- Mikroservis Mimarisi Nedir? Monolitik Mimari Nedir? Microservice vs Monolithic
- Metaverse nedir? Metaverse teknolojisi hayatımızda neleri değiştirecek?
- Keycloak Kullanarak Güvenli Java Spring Boot REST API Uygulaması
Teşekkürler basit, kısa ve öz şekilde anlatılmış. Javayı yeni yeni öğrenirken bu öz bilgiyi almak işime yaradı