Odak modu
StringBuilder & StringPool
Java'da String nesneleri değiştirilemez (immutable) olduğu için, metin üzerinde her değişiklikte yeni bir nesne oluşturulur. Bu durum performans açısından bazı dezavantajlar yaratabilir. İşte bu noktada StringBuilder ve String Pool devreye girer.
1. StringBuilder ve StringBuffer
Java'da metin işlemleri için StringBuilder ve StringBuffer sınıfları kullanılır.
1.1 StringBuilder (Mutable, Thread-Safe Değil)
StringBuilder, değiştirilebilir (mutable) bir String nesnesidir.
String nesnesinden farklı olarak, her değişiklikte yeni bir nesne oluşturmaz, mevcut nesne üzerinde işlemler yapar.
Thread-safe (çoklu iş parçacığında güvenli) değildir, ancak tek iş parçacığında daha hızlıdır.
Örnek Kullanım:
StringBuilder sb = new StringBuilder("Java");
sb.append(" Programming");
System.out.println(sb.toString()); // Çıktı: Java Programming
Avantajları:
1.2 StringBuffer (Mutable, Thread-Safe)
StringBuffer, StringBuilder ile aynı mantıkta çalışır.
Thread-safe'dir, yani birden fazla iş parçacığı (thread) aynı anda çalışıyorsa kullanılabilir.
Thread güvenliği için synchronized mekanizmasını kullanır, bu nedenle StringBuilder'a kıyasla daha yavaştır.
Örnek Kullanım:
StringBuffer sb = new StringBuffer("Java");
sb.append(" Programming");
System.out.println(sb.toString()); // Çıktı: Java Programming
Ne Zaman Kullanılır?
Tek iş parçacığında (single-threaded) çalışıyorsanız StringBuilder kullanmalısınız.
Çok iş parçacığında (multi-threaded) çalışıyorsanız StringBuffer daha güvenlidir.
2. String Pool (String Havuzu)
Java'da String nesneleri özel bir String Havuzu (String Pool) içerisinde saklanır. Aynı içeriğe sahip String nesneleri bellek verimliliği için paylaşılır.
2.1 String Pool Nasıl Çalışır?
Örnek:
String s1 = "Java";
String s2 = "Java";
System.out.println(s1 == s2); // true
Burada s1 ve s2 aynı "Java" nesnesini paylaşır ve aynı referansı gösterir. Java, String Pool sayesinde bellek kullanımını optimize eder.
Ancak, new anahtar kelimesi kullanılırsa, nesne String Pool dışında oluşturulur.
String s3 = new String("Java");
System.out.println(s1 == s3); // false
Burada s3, havuzdan bağımsız olarak yeni bir String nesnesi oluşturur, bu yüzden s1 ile aynı referansı paylaşmaz.
2.2 String Pool Avantajları
2.3 intern() Metodu
Eğer bir String nesnesini manuel olarak String Pool’a eklemek isterseniz, intern() metodunu kullanabilirsiniz.
String s4 = new String("Java").intern();
System.out.println(s1 == s4); // true
Bu kod, s4 nesnesini havuza ekler ve mevcut "Java" nesnesini kullanır.
Sektörde en çok aranan yazılım becerilerini kazan
Yapay zeka desteği, birebir mentörlük saatleri, canlı dersler ve senin için özel hazırlanmış içeriklerle eksiklerini tamamla, düzenli geri bildirimler al ve öğrenme sürecini en verimli hale getir.
Yunus Emre Kabakcı
Patika+ mezunuPatika+ Fullstack Web Development Bootcamp mezunumuz Yunus Emre,
3 ay içinde Katar’dan aldığı teklif ile, global bir şirket olan Pavo Group’da işe başladı!
“İçerik zenginliği, mentor desteği, ileriye dönük bir network sağlaması ve dünyada en çok tercih edilen frameworkler üzerinden bir eğitim veriyor olması Patika+’ı tercih etmemin temel sebepleri oldu!“
Yorum yapabilmek için derse kayıt olmalısın!