Bunlar Java'da yazı objesi oluşturmak için kullandığımız sınıflardır. Temel olarak şu özellikleri taşırlar:
String: Değiştirelemez yazı objesi. (Immutable)
StringBuffer: Değiştirilebilir yazı objesi, senkronize olduğu için farklı kanallar tarafında ulaşılabilinir. (Synchronized, Multi-Thread Safe)
StringBuilder: Değiştirilebilir yazı objesi, senkronize değildir, senkronize hale getirmek için ekstra fonksiyon kullanmalısınız. (Not Synchronized, Single-Thread)
Değiştirmemek üzere bir yazı objesi oluşturuyorsak String kullanıyoruz. Eğer değişebilen bir obje oluşturucaksanız ve programınızın farklı kanalları (Thread) tarafından bu objeye senkronize olarak müdahele edilebilsin istiyorsanız ise StringBuffer kullanmalısınız. StringBuilder, Java'ya senkronize olmasına ihtiyaç duyulmayan ve değiştirilebilir yazı objeleri kullanırken işleri hızlandırmak için gelmiş bir yeniliktir. Küçük projeler için yarattığı tasarruf fazla seçilir olmasa da büyük projelerde StringBuffer'ın getirdiği masrafı fazlasıyla azaltıyor, yani StringBuilder daha hızlı daha ucuz taki pahalısına ihtiyaç duyana kadar.
Ayrıca StringBuffer kullandığınız bir proje sonradan çok kanalda (multi-threaded) kullandığınız objelere ihtiyaç duyarsa yukarda dediğim gibi kodu senkronize olması açısından toplu bir fonksiyon içine alabilir ya da direk StringBuffer ile oluşturduğunuz değişkeni StringBuilder a dönüştebilirsiniz. Ama bu öğeyi başka kanallarda kullanıyorsanız tersini rahatça yapabileceğini söyleyemem.