Java String, StringBuilder ve StringBuffer Nedir? Farkları, Performans ve Örnekler

Bu yazıda Java String (immutable), StringBuilder (hızlı, non-synchronized) ve StringBuffer (thread-safe, synchronized) sınıflarını; String pool, bellek yönetimi, performans ve önemli metotlar üzerinden detaylı anlatacağız.

java string nedir stringbuilder vs stringbuffer string immutable java string pool thread safe stringbuffer stringbuilder append java performans

String sınıfı nedir? (Immutable)

Java String sınıfı immutable (değiştirilemez) bir nesnedir. Yani bir String oluşturulduktan sonra içeriği asla değişmez. “Değişiyormuş” gibi görünmesinin sebebi, aslında her değişiklikte yeni bir String nesnesi üretilmesidir.

String s = "abc";
s.concat("def");
System.out.println(s); // abc (değişmedi)
String s = "abc";
s = s.concat("def");
System.out.println(s); // abcdef
SEO ipucu: “String immutable nedir?”, “Java String neden değişmez?” soruları arama niyeti yüksek olduğu için bu bölümü kısa-öz ama net tutmak CTR’ı artırır.

String sınıfının özellikleri ve neden final?

  • Değişmezdir: String içeriği sonradan düzenlenemez.
  • Unicode destekler: Java’da karakterler 16-bit Unicode olarak ele alınır.
  • String bir nesnedir: İsterseniz new ile de oluşturabilirsiniz.
  • String sınıfı final’dır: Metotların davranışı override edilmez; güvenilirlik ve güvenlik sağlar.
String a = new String("abcdef");
String b = "abcdef";

Java String Pool ve bellek yönetimi

Java, aynı değere sahip String’leri tekrar tekrar üretip belleği şişirmemek için String Pool (String sabit havuzu) denen özel bir alan kullanır. Derleyici bir String literal (ör. "abc") gördüğünde, havuzda aynı değer var mı diye kontrol eder. Varsa yeni nesne üretmek yerine mevcut referansa yönlendirebilir.

String s1 = "abc";
String s2 = "abc";
// s1 ve s2 genellikle aynı literal havuzunu paylaşabilir

String’lerin immutable olması bu noktada kritik: Aynı String’i birden fazla referans paylaşıyorsa ve değiştirilebilir olsaydı, programın farklı yerlerinde beklenmeyen hatalar oluşabilirdi.

String’in önemli metotları (en çok kullanılanlar)

charAt(int index)

String x = "airplane";
System.out.println(x.charAt(2)); // r

concat(String s) ve +

String x = "taxi";
System.out.println(x.concat(" cab")); // taxi cab

String y = "library";
System.out.println(y + " card"); // library card

equalsIgnoreCase(String s)

String x = "Exit";
System.out.println(x.equalsIgnoreCase("EXIT")); // true
System.out.println(x.equalsIgnoreCase("tixe")); // false

length()

String x = "01234567";
System.out.println(x.length()); // 8

replace(char old, char nw)

String x = "oxoxoxox";
System.out.println(x.replace('x','X')); // oXoXoXoX

substring(begin, end)

String x = "0123456789";
System.out.println(x.substring(5));    // 56789
System.out.println(x.substring(5, 8)); // 567

toLowerCase() / toUpperCase()

String x = "A New Moon";
System.out.println(x.toLowerCase()); // a new moon
System.out.println(x.toUpperCase()); // A NEW MOON

trim()

String x = "  hi  ";
System.out.println(x.trim()); // "hi"

StringBuilder ve StringBuffer nedir?

Çok sayıda metin birleştirme, ekleme-çıkarma ve düzenleme işlemi yapacaksanız StringBuilder veya StringBuffer kullanmak daha performanslıdır. Çünkü bu sınıflar, String gibi her seferinde yeni nesne üretmek yerine aynı yapı üzerinde değişiklik yapabilir.

StringBuilder vs StringBuffer farkları

  • StringBuilder: Senkronize değildir (non-synchronized). Genelde daha hızlıdır.
  • StringBuffer: Senkronizedir (synchronized). Thread-safe kullanım için uygundur.
  • API benzer: Metot isimleri büyük ölçüde aynıdır (append, insert, delete, reverse...).
StringBuffer sbf = new StringBuffer("abc");
sbf.append("def");
System.out.println(sbf); // abcdef

StringBuilder sbb = new StringBuilder("abc");
sbb.append("def").reverse().insert(3, " - ");
System.out.println(sbb); // fed - cba

Ne zaman hangisini kullanmalı?

  • Az sayıda değişiklik: Basit işlemlerde String yeterli (özellikle okunabilirlik için).
  • Tek thread, çok işlem: Performans için genelde StringBuilder.
  • Çok thread paylaşımlı yapı: Güvenlik için StringBuffer (thread-safe).
Pratik kural: “Tek thread ise StringBuilder, multi-thread paylaşıyorsa StringBuffer.”

StringBuilder / StringBuffer önemli metotlar (örnekli)

append() — en çok kullanılan

StringBuffer sb = new StringBuffer("set ");
sb.append("point");
System.out.println(sb); // set point

StringBuffer sb2 = new StringBuffer("pi = ");
sb2.append(3.14159f);
System.out.println(sb2); // pi = 3.14159

delete(start, end)

StringBuilder sb = new StringBuilder("0123456789");
System.out.println(sb.delete(4, 6)); // 01236789

insert(offset, String s)

StringBuilder sb = new StringBuilder("01234567");
sb.insert(4, " - ");
System.out.println(sb); // 0123 - 4567

reverse()

StringBuffer sb = new StringBuffer("A man a plan a canal Panama");
sb.reverse();
System.out.println(sb); // amanaP lanac a nalp a nam A

toString()

StringBuffer sb = new StringBuffer("test string");
System.out.println(sb.toString()); // test string

Sık sorulan sorular (FAQ)

String neden immutable?

Güvenlik, String Pool optimizasyonu ve çoklu referans paylaşımında tutarlılık için String sınıfı değişmezdir.

StringBuilder neden daha hızlı?

Senkronizasyon maliyeti yoktur ve aynı nesne üzerinde değişiklik yapar; bu nedenle tek thread senaryosunda daha hızlıdır.

StringBuffer ne zaman gerekli?

Aynı metin nesnesine birden fazla thread erişip değişiklik yapacaksa thread-safe yapı gerektiği için tercih edilir.

Devamı: Java, Spring ve yazılım içerikleri için latestsoftwaredevelopers.com adresini ziyaret edebilirsiniz.

© Latest Software Developers — Java String, StringBuilder, StringBuffer

Beğendiysen bir çay ısmarlayabilirsin ☕

Bana çay ısmarla

Database ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *