Sobes.tech
Middle

Java'da String növünün dəyəri niyə dəyişməzdir?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da String dəyəri bir neçə səbəbə görə dəyişməzdir:

  • İş parçacığı təhlükəsizliyi (Thread Safety): Dəyişməz obyektlər bir neçə iş parçacığı tərəfindən eyni vaxtda təhlükəsiz istifadə oluna bilər və xarici sinxronizasiya tələb etmir. String-in vəziyyəti yaradıldıqdan sonra dəyişdirilə bilmədiyi üçün, iş parçacqları arasında oxuma və ya ötürmə zamanı yarış şəraiti riski yoxdur.

    // Nümunə: iki iş parçacığı eyni string-ə müraciət edir
    String sharedString = "Hello";
    
    // İş parçacığı 1 sharedString-dən təhlükəsiz istifadə edə bilər
    new Thread(() -> {
        System.out.println(sharedString.toUpperCase());
    }).start();
    
    // İş parçacığı 2 də sharedString-dən təhlükəsiz istifadə edə bilər
    new Thread(() -> {
        System.out.println("Uzunluq: " + sharedString.length());
    }).start();
    
  • Effektivlik (Pooling və Sharing): Dəyişməzliyi sayəsində JVM yaddaşdan səmərəli istifadə etmək üçün string havuzundan istifadə edə bilər. Əgər bir neçə dəyişən eyni string dəyərinə istinad edirsə, onlar eyni obyektə işarə edə bilər, bu yaddaş qənaət edir.

    String s1 = "World"; // Havuzda "World" obyekti yaradılır
    String s2 = "World"; // Eyni obyektə işarə edir
    String s3 = new String("World"); // Yeni obyekt yaradılır
    
    System.out.println(s1 == s2); // true - eyni obyektə işarə edir
    System.out.println(s1 == s3); // false - fərqli obyektlərə işarə edir
    
  • Xəritədə açar kimi istifadə: String tez-tez hash xəritələrində (HashMap) açar kimi istifadə olunur. Əgər string dəyişkən olsaydı, onun hash kodu dəyişə bilər və bu, uyğun dəyəri tapmağı çətinləşdirərdi. Dəyişməzlik hash kodunun sabit qalmasını təmin edir.

    import java.util.HashMap;
    import java.util.Map;
    
    Map<String, Integer> ages = new HashMap<>();
    ages.put("Alice", 30);
    // Əgər "Alice" dəyişkən olsaydı, axtarış uğursuz ola bilərdi
    System.out.println(ages.get("Alice")); // 30
    
  • Təhlükəsizlik (Security): Stringlər fayl adları, şəbəkə ünvanları və ya istifadəçi şifrələri kimi gizli məlumatların saxlanması üçün istifadə olunur. Dəyişməzlik bu dəyərlərin təsadüfi və ya zərərli dəyişdirilməsinin qarşısını alır və təhlükəsizliyi artırır.

Bu amillər String-i Java-da əsas və etibarlı məlumat növü edir.