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.

left-disk

Yazılım Kariyerinde İlerlemeni Hızlandıracak Programlar

Patika+ programlarımız ile 4-8 aylık yoğun yazılım kamplarına katıl, temel bilgilerden başlayarak kapsamlı bilgiler edin, yazılım kariyerine başla!

right-cube

Yorumlar

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