Merhaba arkadaşlar, bu yazımda String Pool konusunu anlatacağım. String Pool nedir ? Neden gereklidir? Ne için kullanılır? Vb. sorulara cevap vereceğim.
Java’da String 2 türlü tanımlanır:
1 2 |
1-) String s1 = "Furkan"; 2-) String s3 = new String("Furkan"); |
Bu iki kullanım arasında bellekte tutulma bakımından farklılık vardır. Java da nesneler bilindiği üzerine Heap bellek alanında tutulurlar. String Pool’da Heap bellek alanında bulunur. Şimdi örnek üzerinden konuyu anlamaya çalışalım:
İki adet s1 ve s2 nesnesi oluşturuldu ve ‘Furkan’ değeri atandı. Görüldüğü üzere s1 nesnesi üretildiğinde String Pool da ‘Furkan’ değeri oluşturuldu ve s1 referans oldu. Daha sonradan s2 nesnesi üretildi ve aynı değer atandı. String Pool da değer olduğu için tekrardan değer oluşturulmadı ve s1’in referans olduğu yer s2 ninde referansı oldu.
Şimdi başka bir örnek görelim:
S1 nesnesi üretildi ve ‘Furkan’ değeri atandı. Değer String Pool da olmadığı için String Pool da oluşturuldu. Daha sonra s3 nesnesi new keywordu ile oluşturuldu ve s1 ile aynı değere atandı. İlk örnekten farklı olarak new keywordu ile oluşturulduğu için s1’in referans olduğu değer yerine String Pool da yeni değer oluşturuldu.
Yani String Pool, 1 numaradaki gibi aynı değerleri alarak nesne üretildiğinde gereksiz bellekte yer kaplamayı engeller.
Şimdi geniş örneğimize ve çıktımıza bakalım:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
String s1 = "Furkan"; String s2 = "Furkan"; String s3 = new String("Furkan"); String s4 = "Fur" + "kan"; String s5 = "kan"; 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("Fur + s5 == s1 : " + ("Fur" + 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ı:
Bu yazımı burada bitiriyorum diğer yazılarımda görüşmek üzere.