Sobes.tech
Middle

Java'da String turining qiymati nima uchun o'zgarmas?

sobes.tech AI

AIdan javob

Java'da String qiymati bir nechta sabablarga ko'ra o'zgarmas (immutable):

  • Ip uchun xavfsizlik (Thread Safety): O'zgarmas obyektlar bir nechta iplar tomonidan xavfsiz foydalanilishi mumkin, tashqi sinxronizatsiya talab qilinmaydi. String holati yaratildiqdan so'ng o'zgarmasligi sababli, iplar o'rtasida satrni o'qish yoki uzatishda raqobat shartlari xavfi yo'q.

    // Misol: ikkita ip bir xil satrga murojaat qilmoqda
    String sharedString = "Hello";
    
    // Ip 1 sharedString'dan xavfsiz foydalanishi mumkin
    new Thread(() -> {
        System.out.println(sharedString.toUpperCase());
    }).start();
    
    // Ip 2 ham sharedString'dan xavfsiz foydalanishi mumkin
    new Thread(() -> {
        System.out.println("Uzunligi: " + sharedString.length());
    }).start();
    
  • Samardorlik (Pooling va Sharing): O'zgarmasligi sababli JVM xotira foydalanishni optimallashtirish uchun satrlar havuzidan foydalanishi mumkin. Bir nechta o'zgaruvchilar bir xil satr qiymatiga murojaat qilsa, ular havuzdagi bir xil obyektga murojaat qilishi mumkin, bu xotira tejashga yordam beradi.

    String s1 = "World"; // Havuzda "World" obyektini yaratadi
    String s2 = "World"; // Havuzdagi bir xil obyektga murojaat qiladi
    String s3 = new String("World"); // Yangi obyekt tashqarida yaratiladi
    
    System.out.println(s1 == s2); // true - bir xil obyektga murojaat qilmoqda
    System.out.println(s1 == s3); // false - turli obyektlarga murojaat qilmoqda
    
  • Map'da kalit sifatida foydalanish: String ko'pincha hash xaritalarida (HashMap) kalit sifatida ishlatiladi. Agar satr o'zgarmas bo'lsa, uning hash kodi o'zgarishi mumkin, bu esa mos qiymatni topishni imkonsiz qiladi. O'zgarmaslik hash kodining doimiy qolishini ta'minlaydi.

    import java.util.HashMap;
    import java.util.Map;
    
    Map<String, Integer> ages = new HashMap<>();
    ages.put("Alice", 30);
    // Agar "Alice" o'zgarmas bo'lsa, "Alice" bo'yicha qidiruv muvaffaqiyatsiz bo'lishi mumkin
    System.out.println(ages.get("Alice")); // 30
    
  • Xavfsizlik (Security): Satrlar fayl nomlari, tarmoq manzillari yoki foydalanuvchi parollari kabi maxfiy ma'lumotlarni saqlash uchun ishlatiladi. O'zgarmasligi bu qiymatlarning tasodifan yoki zararli o'zgarishlardan himoya qiladi, xavfsizlikni oshiradi.

Ushbu omillar Stringni Java'da asosiy va ishonchli ma'lumot turi qiladi.