Odak modu

Java Eğitimi

StringBuilder&StringPool

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ı:

  • Hızlıdır (tek iş parçacıklı uygulamalarda).
  • Hafızayı verimli kullanır.
  • append(), insert(), replace(), delete() gibi yöntemlerle değiştirilebilir.

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ı

  • Bellek tasarrufu sağlar. Aynı String değeri için tekrar tekrar yeni nesneler oluşturulmaz.
  • Performansı artırır. Aynı String değeri kullanıldığında, havuzdan mevcut nesne alınır.

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.

Background Pattern
Birlikte öğrenelim

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+ mezunu

Patika+ 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!“

Yorumlar

Yorum yapabilmek için derse kayıt olmalısın!