Genel

String vs StringBuilder

Merhaba,

Bu dersimizde String ve StringBuilder’ın farkını göreceğiz.

Java’da String ve StringBuffer/StringBuilder arasındaki en önemli fark : String objesi değiştirilemezken StringBuffer/StringBuilder objelerinin değiştirilebilir olmasıdır.

Herşeye String kullanan birimisinizdir ? Cevabı evet ise burada düzeltmeniz gereken şeyler vardır.

Mesela

        String test="umiitkose";
        String siteAdresi=test.concat(".com");
        System.out.println(siteAdresi);

        String test1="umiitkose";
        String test1= test1 +  ".com";
        System.out.println(test1);

Yukarda örnek 2 tane String objesi yaptık. Bir değişkene eklemeler için kullandık. Performansı konusunda bir düşünceniz var mı ? Yada çok iyi bir kod mu oldu ?

Bu sorular için alta bir de şu kodu ekleyeyim.

        StringBuilder test=new StringBuilder("umiitkose");
        test.append(".com");
        System.out.println(test);

Son bir örnek ise
string colors;
colors += "red";
colors += "blue";
colors += "green";

StringBuilder sb = new StringBuilder("");
sb.Append("red");
sb.Append("blue");
sb.Append("green ");
string colors = sb.ToString();

Yukardaki gibi. Ya neler oluyor ? Sonuçları aynı ama ?

Evet doğru haklısınız sonuç her zaman aynı gelin şimdi ne olduğuna bakalım.

String sınıfları immutable StringBuffer/StringBuilder ise mutable olduğunu yukarda dedik.(String = Değiştirilemez, StringBuffer||StringBuilder=Değiştirilebilir)

String objenin içine saklanan değer değiştirilemez. Peki nasıl oluyor da ben istediğim zaman string bir değişkeni değiştirebiliyorum diye sorabilirsiniz. Sizin görmüş olduğunuz nesene aynı nesne değildir. String objesi değişmek için arka planda yeni bir String nesnesi oluşturur. Her değişikilte yeni bir String class’ı oluşuyor. Bu da zamanla performansı kötü yönde etkiliyor.

StringBuffer/StringBuilder objelerini kullanırsanız performans açısından daha iyi sonuçlar elde edersiniz. Çünkü Objenin içinde saklanan değer değiştirilebilir bir değerdir.

StringBuffer ile StringBuilder arasında ki tek fark ise “senkronizasyon”dur.
StringBuffer “synchronized” iken StringBuilder “synchronized” değildir.

Thread kullancaksanız; StringBuffer, kullanmayacaksanız StringBuilder kullanmanız daha verimli olcaktır.

Yani siz yukardaki örnekte 3 kere String objesini memory’de oluşturmak mı istersiniz yoksa StringBuilder/StringBuffer ile bu işi 1 kerede çözmek mi istersiniz ?

 

Kaynakça:

İngilizce : //www.javatpoint.com/difference-between-stringbuffer-and-stringbuilder

İngilizce : //net-informations.com/q/faq/builder.html

Türkçe : //wxtp.wordpress.com/2012/08/25/java-stringbuilder/

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir