Bölüm 5 · Simülatör

Dizgi Havuzu ve StringBuilder

← Bölüm 5
Doğru 0 / 0

Java kodu

    Bellek

    Çıktı (konsol)

    Dizgi Havuzu ve StringBuilder

    Amaç: Java'nın dizgileri bellekte nasıl tuttuğunu görmek. Kaynak koddaki "Java" gibi dizgi sabitleri heap'teki özel bir bölgede, dizgi havuzunda tutulur ve içeriği aynı sabitler tek bir nesneyi paylaşır. String değiştirilemez: her "değişiklik" yeni bir nesne üretir. StringBuilder ise aynı tamponu yerinde değiştirir.

    Nasıl kullanılır?

    1. Listeden bir program seçin; Adım ▶ / ◀ (klavyede → / ←), Oynat, Sıfırla.
    2. Solda yığındaki main çerçevesi, sağda heap: yeşil kesik çerçeveli bölge dizgi havuzudur. Yeni oluşan nesne kırmızı kenarlı, ulaşılamayan nesne soluk ve kesik çizgilidir (çöp toplamaya uygun).
    3. Kendini dene açıkken her println çıktısını önceden tahmin edersiniz.

    Hatırlatma

    • == iki referansın aynı nesneyi gösterip göstermediğine bakar; equals içerikleri karşılaştırır. Dizgileri her zaman equals ile karşılaştırın.
    • new String("Java") havuzdaki sabitten bağımsız, yeni bir nesne oluşturur. s.intern() havuzdaki eşini döndürür.
    • Derleme zamanında hesaplanabilen ifadeler ("Ja" + "va", final değişkenle birleştirme) tek bir sabite dönüşür ve havuza gider; değişkenle çalışma zamanında yapılan + yeni nesne üretir.
    • s.toUpperCase() gibi metotlar s'yi değiştirmez; sonucu kullanmak için atamak gerekir: s = s.toUpperCase();
    • StringBuilder'ın bir uzunluğu (length) ve tampon büyüklüğü (capacity) vardır; new StringBuilder("Ja") için kapasite 16 + 2 = 18'dir. Döngüde birleştirme için String + yerine StringBuilder kullanılır.

    Nesne numaraları (#1, #2…) yalnızca anlatım içindir. Bir sabitin havuza tam olarak ne zaman eklendiği JVM'e bağlıdır; burada ilk kullanıldığı satırda gösterilir. Tüm çıktılar javac --release 8 ile derlenip Java 8 üzerinde çalıştırılarak doğrulanmıştır.

    İlgili sunum: Bölüm 5 · Dizgi (== ile Karşılaştırma, Dizgi Havuzu, Havuz: Adım Adım, Değiştirilemez (Immutable), StringBuilder).