Sobes.tech
Junior

Java'da satrlar havzasi nima?

sobes.tech AI

AIdan javob

String havuz (String pool) Java-ning xotira (heap) bo'limida joylashgan maxsus xotira hudud bo'lib, unda satr literal'lari va internlangan satrlar saqlanadi. Uning asosiy maqsadi — bir xil satr qiymatlarini takror ishlatish orqali xotira tejash.

Qanday ishlaydi:

Satr literal'ini yaratganda (masalan, "salom"), JVM avvalo, aynan shu qiymatga ega satr oldin mavjud yoki yo'qligini tekshiradi.

  • Agar satr mavjud bo'lsa: JVM, pooldagi mavjud ob'ektga havolani qaytaradi, yangi ob'ekt yaratmasdan.
  • Agar satr mavjud bo'lmasa: JVM yangi String ob'ektini poolda yaratadi va unga havolani qaytaradi.

Satrlar va pool yaratish:

  1. Satr literal yordamida:
    // "salom" satr literal
    String s1 = "salom";
    String s2 = "salom";
    // s1 va s2 bir xil ob'ektga havola qiladi
    
  2. new String() konstruktor yordamida:
    String s3 = new String("dunyo");
    String s4 = new String("dunyo");
    // s3 va s4 turli ob'ektlarga havola qiladi, garchi qiymatlari bir xil bo'lsa ham.
    // "dunyo" satr literal poolda bo'lishi mumkin, lekin s3 va s4 ob'ektlari undan tashqarida.
    
  3. intern() metod yordamida:
    String s5 = new String("java");
    // intern() metodi, poolda bunday satr bor-yo'qligini tekshiradi
    String s6 = s5.intern();
    // Agar bo'lsa, pooldagi ob'ektga havolani qaytaradi.
    // Agar bo'lmasa, hozirgi satrni poolga qo'shib, havolani qaytaradi.
    

Satrlar havuzining afzalliklari:

  • Xotira tejash: Takrorlangan satr ob'ektlarining sonini kamaytiradi.
  • Ishlash tezligini oshirish: Literal satrlarni taqqoslash (==) String ob'ektlarini equals() yordamida taqqoslashdan tezroq bo'lishi mumkin, agar ikkala operand ham havuzdagi bir xil ob'ektga havola qilsa.

Muhim eslatma:

Satrlarni == operatori bilan taqqoslash, ikki o'zgaruvchining xotirada bir xil ob'ektga havola qilayotganini tekshiradi. Satrlarning mazmunini taqqoslash uchun har doim equals() metodidan foydalaning.

String str1 = "abc"; // Poolda
String str2 = "abc"; // Poolda, bir xil havola
String str3 = new String("abc"); // Pooldan tashqarida
String str4 = str3.intern(); // Poolda, str1 va str2 bilan bir xil havola

System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1 == str4); // true
System.out.println(str1.equals(str3)); // true