Sobes.tech
Junior

Java'da StringBuilder ve StringBuffer arasındaki farklar nelerdir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Ana temel fark, StringBuffer çok iş parçacıklı güvenli iken, StringBuilder güvenli değildir.

  • StringBuffer: Tüm metodları senkronized (synchronized) edilmiştir. Bu, aynı anda birden fazla iş parçacığıyla çalışırken güvenliği sağlar ve yalnızca bir iş parçacığının herhangi bir zamanda bir yöntemi çalıştırmasına izin verir. Ancak, bu aynı zamanda senkronizasyon maliyetleri nedeniyle performansı düşürür.

  • StringBuilder: Metodlar senkronize edilmemiştir. Bu, onu tek iş parçacıklı ortamlarda StringBuffer'dan daha hızlı yapar. Birden fazla iş parçacığı tarafından dış senkronizasyon olmadan kullanıldığında, işlemler karışabilir ve yanlış sonuçlar ortaya çıkabilir.

Ne zaman kullanmalı:

  • Tek iş parçacıklı uygulamalarda veya daha yüksek seviyede iş parçacığı güvenliği sağlandığında StringBuilder kullanın. Daha hızlıdır.
  • Birden fazla iş parçacığının aynı nesneyi aynı anda değiştirebildiği çok iş parçacıklı uygulamalarda, yerleşik iş parçacığı güvenliği gerektiğinde StringBuffer kullanın.

Örnek:

// Tek iş parçacıklı ortamda `StringBuilder` (tercih edilir)
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" ").append("World");
System.out.println(sb.toString()); // "Hello World" yazdırır

// Çok iş parçacıklı ortamda `StringBuffer` (daha güvenli)
StringBuffer sbf = new StringBuffer();
// Gerçek çok iş parçacıklı senaryoda, iş parçacıkları sbf'ye erişir
sbf.append("Thread ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // "Thread 1" veya "Thread 2" gibi bir şey yazdırır, iş parçacığına bağlı olarak