0Pricing
Java Academy · Ders

Dizeler Neden Değişmezdir

Dizelerin değişmezliğini anlayın

Dizeler Neden Değişmezdir, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Dizeler Değiştirilemez

Java'da bir String değişmezdir: oluşturulduktan sonra karakterleri asla değiştirilemez. Bir dizeyi değiştiriyor gibi görünen her metot, aslında yepyeni bir dize döndürür.

Metotlar Yeni Dizeler Döndürür

toUpperCase(), replace() ve benzeri metotlar özgün değeri değiştirmez. Yeni bir String üretir ve özgün değeri olduğu gibi bırakır.

public class Main {
    public static void main(String[] args) {
        String original = "hello";
        String upper = original.toUpperCase();
        System.out.println("original: " + original);
        System.out.println("upper: " + upper);
    }
}

Yeniden Atama Değişiklik Yapmak Değildir

s = s + "!" yazdığınızda değişken artık yeni bir dizeyi gösterir. Eski dize nesnesi değişmez ve çöp toplayıcı tarafından toplanabilir.

public class Main {
    public static void main(String[] args) {
        String s = "hi";
        String firstRef = s;
        s = s + "!";
        System.out.println("s: " + s);
        System.out.println("firstRef: " + firstRef);
    }
}

Değişmezlik Neden Önemlidir

Değişmezlik önemli faydalar sağlar:

  • İş parçacığı güvenliği: dizeler kilit kullanılmadan paylaşılabilir
  • Önbelleğe alma: karma kodları ve havuz girdileri geçerliliğini korur
  • Güvenlik: bir metoda aktarılan dize, siz fark etmeden değiştirilemez

String Havuzu

Aynı dize sabitleri, dize havuzundaki tek bir nesneyi paylaşabilir. Bu yalnızca dizeler hiç değişmediği için güvenlidir. Burada iki sabit, havuzdaki aynı nesneyi gösterir.

public class Main {
    public static void main(String[] args) {
        String a = "java";
        String b = "java";
        System.out.println(a == b);
        System.out.println(a.equals(b));
    }
}

new String Havuzlamayı Bozar

new String(...) kullanmak ayrı bir nesne oluşturur; bu nedenle içerikler aynı olsa bile referans eşitliği farklıdır. İçerikleri her zaman equals ile karşılaştırın.

public class Main {
    public static void main(String[] args) {
        String a = "java";
        String b = new String("java");
        System.out.println("== : " + (a == b));
        System.out.println("equals: " + a.equals(b));
    }
}

Birleştirmenin Maliyeti

Dizelerdeki her + işlemi yeni bir nesne oluşturur. Bunu bir döngüde yapmak, kısa ömürlü birçok dize için bellek ayırır ve zamanla belleği boşa harcar.

public class Main {
    public static void main(String[] args) {
        String result = "";
        for (int i = 1; i <= 5; i++) {
            result = result + i;
        }
        System.out.println(result);
    }
}

Karesel Büyüme

Her birleştirme, önceki tüm karakterleri kopyaladığından, bir döngüde + kullanarak uzun bir dize oluşturmak verimsiz ölçeklenir (kabaca O(n kare)). Temel performans sorunu budur.

public class Main {
    public static void main(String[] args) {
        String s = "";
        for (int i = 0; i < 1000; i++) {
            s += "x";
        }
        System.out.println("Length: " + s.length());
    }
}

Değişmez Değerler Öngörülebilirdir

Bir dizeyi metoda aktarmak güvenlidir: metot sizin kopyanızı değiştiremez. Burada metot yeni bir dize oluşturur ve çağıranın değeri olduğu gibi kalır.

public class Main {
    static void shout(String s) {
        s = s + "!!!";
        System.out.println("inside: " + s);
    }
    public static void main(String[] args) {
        String msg = "hello";
        shout(msg);
        System.out.println("outside: " + msg);
    }
}

Çözümün Ön Gösterimi

Dizeleri verimli bir şekilde oluşturmanız gerektiğinde Java, değiştirilebilir bir yardımcı sınıf olan StringBuilder'ı sunar. Her seferinde yeni nesneler ayırmak yerine yerinde değişiklik yapar.

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= 5; i++) {
            sb.append(i);
        }
        System.out.println(sb.toString());
    }
}

İki Yaklaşımın Karşılaştırılması

Birkaç birleştirme için + tamamen uygun ve okunabilirdir. Bir döngüde çok sayıda birleştirme yapıyorsanız StringBuilder'ı tercih edin. Seçiminizi ne kadar metin oluşturduğunuza göre yapın.

public class Main {
    public static void main(String[] args) {
        String simple = "a" + "b" + "c";
        StringBuilder sb = new StringBuilder("a");
        sb.append("b").append("c");
        System.out.println(simple);
        System.out.println(sb);
    }
}

Hızlı Kontrol

Bir String üzerinde s.toUpperCase() çağırdığınızda gerçekte ne olur?

Özet

Dizelerin neden değişmez olduğunu öğrendiniz:

  • Bir String'in içeriği asla değişmez
  • Metotlar yeni dizeler döndürür
  • Değişmezlik, iş parçacığı güvenliği, havuzlama ve güvenlik sağlar
  • Döngülerde + ile birleştirme verimsiz ölçeklenir
  • StringBuilder değiştirilebilir çözümdür

Sıkça Sorulan Sorular

“Dizeler Neden Değişmezdir” dersi ücretsiz mi?

Evet — “Dizeler Neden Değişmezdir” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Dizeler Neden Değişmezdir” dersinde ne öğreneceğim?

Dizelerin değişmezliğini anlayın Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Dizeler Neden Değişmezdir” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Dizeler Neden Değişmezdir
  2. StringBuilder ile Dize Oluşturma
  3. StringBuilder İşlevleri
  4. StringBuilder ve StringBuffer
← Java Academy Sayfasına Dön