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.
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!
Yorum yapabilmek için derse kayıt olmalısın!