Sobes.tech
Middle

Java'da String türü değeri neden değiştirilemez?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da String değeri, birkaç nedenden dolayı değiştirilemez:

  • İş Parçacığı Güvenliği (Thread Safety): Değiştirilemeyen nesneler, dış senkronizasyon gerekmeden birden fazla iş parçacığı tarafından güvenle kullanılabilir. String durumunun oluşturulduktan sonra değiştirilememesi nedeniyle, iş parçacıkları arasında okuma veya iletme sırasında yarış durumu riski yoktur.

    // Örnek: iki iş parçacığı aynı dizeye erişiyor
    String sharedString = "Hello";
    
    // İş parçacığı 1, sharedString'i güvenle kullanabilir
    new Thread(() -> {
        System.out.println(sharedString.toUpperCase());
    }).start();
    
    // İş parçacığı 2 de sharedString'i güvenle kullanabilir
    new Thread(() -> {
        System.out.println("Uzunluk: " + sharedString.length());
    }).start();
    
  • Verimlilik (Havuzlama ve Paylaşma): Değiştirilemezlik nedeniyle JVM, bellek kullanımını optimize etmek için dize havuzunu (String Pool) kullanabilir. Birden fazla değişken aynı dize değerine işaret ediyorsa, hepsi aynı nesneye işaret edebilir, bu da bellek tasarrufu sağlar.

    String s1 = "World"; // Havuzda "World" nesnesi oluşturulur
    String s2 = "World"; // Aynı nesneye işaret eder
    String s3 = new String("World"); // Yeni bir nesne oluşturulur
    
    System.out.println(s1 == s2); // true - aynı nesneye işaret eder
    System.out.println(s1 == s3); // false - farklı nesnelere işaret eder
    
  • Map'te anahtar olarak kullanımı: String, sıkça hash haritalarında (HashMap) anahtar olarak kullanılır. Eğer dize değiştirilebilir olsaydı, hash kodu değişebilir ve bu da uygun değeri bulmayı imkansız hale getirirdi. Değiştirilemezlik, hash kodunun sabit kalmasını sağlar.

    import java.util.HashMap;
    import java.util.Map;
    
    Map<String, Integer> ages = new HashMap<>();
    ages.put("Alice", 30);
    // "Alice" değiştirilebilir olsaydı, arama başarısız olabilirdi
    System.out.println(ages.get("Alice")); // 30
    
  • Güvenlik: Stringler, dosya adları, ağ adresleri veya kullanıcı şifreleri gibi gizli bilgileri saklamak için kullanılır. Değiştirilemezlik, bu değerlerin yanlışlıkla veya kötü niyetli olarak değiştirilmesini önler, böylece güvenliği artırır.

Bu faktörler, String'i Java'da temel ve güvenilir bir veri tipi yapar.