Koray PEKER
Menu
  • Anasayfa
  • Kütüphane
  • Kategoriler
    • Java
    • Spring
    • Tasarım Şablonları
    • Git
    • Maven
    • ORM Çatıları
    • VCS
    • SDLC
    • DevOps
    • Algoritma
    • Eğitim
    • Diğer
  • Hakkımda
Menu

String Pool Nedir ?

7 Nisan 201820 Aralık 2018 tarihinde yayımlandı

String, sizin de bildiğiniz gibi Java’da yaygın olarak kullanılan karakter dizisi nesneleridir. İki şekilde String nesnesi oluşturabiliriz. Şöyle ki;

  • çift tırnak kullanarak
Java
1
String name = "Koray";
  • new anahtar kelimesi kullanarak
Java
1
String name = new String("Koray");

Java, bu oluşan Stringleri bir havuzda özel olarak korur.

String Pool Nedir ?


String Pool (String Havuzu), Java Heap Memory’de saklanan bir alandır. Flyweight Tasarım Şablonu örneğidir. String immutable(değişmez) olduğu için ve String intern kavramı uygulanabildiği için Java’da String Pool mümkündür.

Peki, nedir bu String interning ? String Interning, değişmez (immutable) olması gereken her bir farklı String değerinin yalnızca bir kopyasını saklama yöntemidir.

Aşağıdaki örnek ile daha iyi anlayacaksınız.

String Pool, tasarruf sağlar yani boş yere heap de referanslar oluşturmaz. String oluşturmak için çift tırnak kullandığımızda, ilk önce String havuzunda aynı değer ile String’i arar, eğer bulursa referansı döndürür, bulamazsa havuzda yeni bir String oluşturur ve sonra referansı döndürür.

new operatörü kullanılarak, heap alanında yeni bir String nesnesi oluşturmuş oluruz. Havuza yerleştirmek için intern() yöntemini kullanabilir ve havuzda bu String nesnenin içerdiği dizeye bakılır, bulunursa havuzdaki dize döndürülür. Aksi takdirde, bu String nesnesi havuza eklenir ve bu String nesnesine bir referans döndürülür.

Unutmayınız ki; new operatörü her zaman yeni bir referans oluşturur ve ==  ile nesnelerin referanslarının eşitliğini kontrol eder. Bu bilgiler ışığında aşadaki örneğin çıktılarını bilebilirsiniz.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String s1 = "Koray";
String s2 = "Koray";
String s3 = new String("Koray");
String s4 = "Ko" + "ray";
String s5 = "ray";
String s6 = s3.intern();
 
System.out.println("s1 == s2 : " + (s1 == s2));
System.out.println("s1 == s3 : " + (s1 == s3));
System.out.println("s4 == s1 : " + (s4 == s1));
System.out.println("s4 == s3 : " + (s4 == s3));
System.out.println("Ko + s5 == s1 : " + ("Ko" + s5 == s1));
System.out.println("s2.intern() == s3.intern() : " + (s2.intern() == s3.intern()));
System.out.println("s6 == s3 : " + (s6 == s3));
System.out.println("s6 == s2 : " + (s6 == s2));

Çıktı

Java
1
2
3
4
5
6
7
8
s1 == s2 : true
s1 == s3 : false
s4 == s1 : true
s4 == s3 : false
Ko + s5 == s1 : false
s2.intern() == s3.intern() : true
s6 == s3 : false
s6 == s2 : true

Kaynaklar

  • Oracle String
  • Oracle Intern

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

POPÜLER YAZILAR

  • CI (Continuous integration) ve CD (Continuous Delivery/Deployment)
  • Bir Yazılımcının Sırt Çantası
  • NullPointerException’dan Kaçış
  • Project : Lombok
  • JAR, WAR, EAR Üçlemesi
  • İlk işime veda :(
  • REST Mimarisi ve RESTful Servisler
  • Versiyon Kontrol Sistemleri (VCS)
  • Mutable ve Immutable nedir ?
  • Derinlemesine Apache Maven – I

Ara

Son Yazılar

  • Apache Kafka
  • Postman API’ları Görselleştirme
  • MongoDB Cheat Sheet
  • Splunk 101 – Giriş
  • Yük Testi ve SoapUI
  • Modern Veri Tabanları
  • Senior Stajyer ?!
  • API Dokümantasyon Önemi ve Swagger
  • Kod Tekrarı(Code Duplication) ve DRY
  • Yapılacaklar : Kitap OKU

TAKİP ET

Koray PEKER
©2021 Koray PEKER