🔤 Strings & Math — Metin ve Matematik

Strings & Math — Metin ve Matematik: Java'da String immutable'dır: bir kez oluşturulan metin bellekte asla değişmez, her "değişiklik" aslında yeni bir String nesnesi doğurur — tı

Java'da String immutable'dır: bir kez oluşturulan metin bellekte asla değişmez, her "değişiklik" aslında yeni bir String nesnesi doğurur — tıpkı taşa kazınmış bir yazı gibi: yazıyı düzeltmek istersen taşı silmezsin, yeni bir taş yontarsın, eski taş olduğu gibi kalır. Peki değiştirilemezlik zahmetliyken neden Java String'i böyle tasarlamış, neden StringBuilder ayrı bir sınıf? Çünkü immutability'nin String'i thread-safe ve HashMap key olarak güvenli yapması gibi büyük avantajları var; ama döngüde 10.000 kez `+` ile birleştirme yaparsan her adımda yeni nesne yaratıp çöp üretir, işte tam bu yüzden değiştirilebilir StringBuilder kullanılır. Python'da str de immutable'dır ve `join` ile aynı sorun çözülür; C++'ta ise string mutable olduğu için bu ayrım yoktur. QA mühendisi için bu fark performans testlerinde ortaya çıkar: büyük bir CSV'yi satır satır `+` ile birleştiren bir raporlama util'i, StringBuilder'a çevrilmediğinde test suite'ini gözle görülür yavaşlatır ve zamanlamaya duyarlı testlerde beklenmedik timeout kaynaklı flaky sonuçlar üretebilir.

En önemli String metotları

Micro Lab: Kod yazma

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

StringBuilder — Verimli Metin Birleştirme

StringBuilder vs String + (performance)

Bu satır ekrana ne yazar? Çalıştırmadan önce zihninde soldan sağa hesapla.

Hepsi String olsaydı doğru olurdu — ama ilk 1 + 2 hâlâ sayısal toplamdır (henüz String yok).

1 + 2 tek sayıya (3) iner, iki ayrı 3 yan yana gelmez.

Java çarpma/öncelik uygulamaz; + operatörü tamamen soldan sağa çalışır.

String Pool — Literal mı, new String mi?

`"hi"` bir literal. Java onu String Pool'a (Heap içinde özel, paylaşılan bir alan) yerleştirir ve `a` bu havuz nesnesini işaret eder.

`b = "hi"` AYNI literal — Java yeni nesne yaratmaz, havuzdaki mevcut `"hi"`'yi yeniden kullanır. `a` ve `b` artık AYNI nesneyi işaret eder (interning).

`new String("hi")` `new` anahtar kelimesiyle Heap'te BRAND-NEW, ayrı bir nesne yaratır — pool'u atlar. İçerik aynı ("hi") ama nesne farklı. `c` bu yeni nesneyi işaret eder.