Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

String Türü ve Özellikleri

String türü, karakterleri char türünden olan bir dizi yapısıdır.Bellekte saklanma şekilleri dizileri anımsatır ancak dizilerden biraz farklıdır.Bu yazıda string türüyle ilgili genel kültürünüzü arttıracak konulara değineceğiz.
String Türünün Özellikleri
Şimdi programcıların şaşıracakları bir durumdan bahsedeceğim.String türünü biz değer tipi bir değişken olarak sanarız.Aslında String türü , referans türü olup belleğin “heap” alanında tutulur.String tipinden bir değişken tanıladığımızda bize ne kadar değer tipi gibi gelsede, arka planda System.String sınıfından bir nesne oluşturulmuş olur.

String türü gibi referans türü olupta, değer türü gibi davranan türlere immutable type(sabit – değişmez türler) denir.Yani bu veri türlerini bir kez tanımladıktan sonra , değerleri değiştirilemez.
String veri türüde immutable type karakterli olduğundan dolayı bir kere tanımlandıktan sonra bir daha değeri değiştirilemez.
“Ancak ben çalışmalarımda string olarak tanımlanan değişkenlerin değerini sonradan değiştirebiliyorum ” diye söyleyebilirsiniz.
O halde nasıl oluyorda değeri daha sonra değiştirilebiliyor?

            string slogan = "Yaşasın Fenerbahçe";
            slogan.Replace("Fenerbahçe", "Kanarya");
            Console.Write(slogan);
            Console.Read();

Yukarıdaki string tipinden slogan adındaki değişkeni inceleyelim.Replace() metodu uygulandıktan sonra “Yaşasın Kanarya” olması gerekmektedir.Ancak slogan değişkenini yazdırdığımızda ekran çıktısı olarak “Yaşasın Fenerbahçe” yazacaktır.
Şimdide aşağıdaki kod bloğunu inceleyelim.

            string slogan = "Yaşasın Fenerbahçe";
            slogan = slogan.Replace("Fenerbahçe", "Kanarya");
            Console.Write(slogan);
            Console.Read();

Yukarıdaki kod bloğunu çalıştırdığımız zaman ekrana “Yaşasın Kanarya” yazısı gelecektir.Burada slogan değişkenimizin asıl değeri değiştirilmemiştir.Arka planda olan mevzu şudur;
“Yaşasın Fenerbahçe” yazısını “Yaşasın Kanarya” olarak değiştirdi ve ortaya çıkan bu yeni değer için yeni bir bellek alanı oluşturup slogan değişkenini bu bellek alanına işaretledi.Oysa bellek üzerinde “Yaşasın Fenerbahçe” bilgisi mevcuttur.Ha erişemiyoruz o ayrı.


String türünün diğer değer türlerinden farkıda null değer alabiliyor olmasıdır.int,double vs. gibi türler null değer almazlar!
Şuna dikkat etmeliyiz.Bir değerin null ya da Empty(string.Empty – Boş) olması arasında fark vardır.Bir değişkenin değeri null olduğu zaman, bellekte ona alan ayrılmazken,Empty de ayrılır.Çünkü içi boş olacak şekilde bellekte yer işgal edecektir.


String sınıfının indexerı kullanılarak istenilen char(karakter) ine ulaşılabilir.

            string mesaj = "Merhaba Dünya";
            Console.Write(mesaj[3]);
            Console.Read();

Yukarıdaki kod bloğunun çıktısı “h” olacaktır.
String sınıfının Indexer ı ReadOnly(Sadece okunur) dir.Aşağıdaki gibi bir işlem hata verecektir.

            mesaj[4] = "j";

Elimizdeki bir char dizisinde karakterlerden metin oluşturabiliriz.Bunu string sınıfının char[] dizisi isteyen constructorını kullanarak yapabiliriz.

            char[] karakterler = { 'A', 'N', 'K', 'A', 'R', 'A' };
            string birlestir = new string(karakterler);
            Console.Write(birlestir);
            Console.Read();

Yukarıdaki kod bloğunun çıktısı “ANKARA” olacaktır.


String veri türlerinde “==” operatörü bir çok operatör gibi yeniden tüklenmiştir.
Örnek olarak, iki string değişkeni karşılaştırmak amacıyla kullanıldığında, değişkenlerin Equals() metodları kullanılır.


Şunadan dikkat etmek gerekir.String türünün referans türü olduğunu öğrendik.Değer türleri belleğin stack alanında oluşturuldukları için, işleri bitince anında silinebilecek bir yapıları vardır.Ancak string türü referans türü olduğundan, belleğin heap alanında saklanır ve string türü değişkenlerle işimiz bittiği zaman hemen silinmezler.GC(Garbage collector)’yi bekler.

string türü hakkında bildiğimiz öğrendiğimiz gerçekler, sizler kadar benide şaşırttı 🙂
Sonraki yazılarımda görüşmek dileğiyle …
İyi çalışmalar ..

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. İbrahim DEMİR dedi ki:

    Çok yararlı bir yazı olmuş. Allah razı olsun.
    Çalışmalarınız da başarılar.

  2. Shatlyk dedi ki:

    Merhaba,

    string.join() ve char.toupper() şeklinde kodlar kullanıldığını gördüm. Ama bunlar için hiçbir string ve char diye nesne oluşturulmamış. Bu nasıl olabilir? Nesne olusturup, degiskene atanip sonra kullanilmasi gerekmezmi?

Bir cevap yazın

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

*