Last updated on August 2, 2022
String birleştirme operatörünü (+) kullanarak birden çok string değerini tek bir string olarak kolayca birleştirmemiz mümkündür. Bu yöntem eğer tek satırlık bir çıktı oluşturmak istiyorsanız veya küçük bir nesneyi string formatında ifade etmek istiyorsanız işinizi görebilir, ancak daha büyük işlerde sınıfta kalır. Bunun sebebi ise Madde 17’de gördüğümüz gibi stringlerin değiştirilemez (immutable) olmasıdır. İki stringi birleştirdiğinizde her ikisinin de kopyalanması gerekir.
Örneğin, bir dokümanı oluşturmak için her bir satırı +
operatörü ile birleştiren bir metot yazdığımızı düşünelim:
// Yanlış string birleştirme kullanımı - düşük performans
public String statement() {
String result = "";
for (int i = 0; i < numItems(); i++)
result += lineForItem(i); // String birleştirme
return result;
}
Eğer bu metodu kullanarak işlediğiniz satır sayısı çok fazla olursa performans çok düşük olacaktır. Bunu düzeltmek için String
yerine StringBuilder
kullanmalıyız. Aşağıdaki koda bakalım:
public String statement() {
StringBuilder b = new StringBuilder(numItems() * LINE_WIDTH);
for (int i = 0; i < numItems(); i++)
b.append(lineForItem(i));
return b.toString();
}
String birleştirme işlemini hızlandırmak için Java 6’dan beri çok sayıda iyileştirme yapılmasına rağmen hala aradaki performans farkı çok büyüktür. Benim makinamda, numItems
değerinin 100 olduğu ve lineForItem
metodunun 80 karakterli bir string döndürdüğü durumda, ikinci metot birinciden 6.5 kat daha hızlı çalışmaktadır. Bunun sebebi birinci metodun eleman sayısı olarak n2
, ikincininse n
karmaşıklığa sahip olmasıdır. Bu farktan dolayı, eleman sayısı büyüdükçe aradaki performans farkı da katlanacaktır. Dikkat ettiyseniz ikinci metotta StringBuilder
yaratılırken gerekli olan bütün belleği önceden ayırması için boyut bilgisi geçilmiştir. Bu bilgi mevcut değilse, varsayılan boyutta bir StringBuilder
yaratsak bile yine de birinci metottan 5.5 kat hızlı çalışmaktadır.
Buradaki ders çok açıktır. String birleştirme operatörünü en fazla birkaç tane stringi birleştirmek için kullanın. Kod performansı önemliyse, bunun yerine StringBuilder.append()
metodunu kullanın. Bunun yerine karakter dizisi (char array) de kullanabilir veya stringleri birleştirmek yerine tek tek işleyebilirsiniz.