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
Stringob'ektini poolda yaratadi va unga havolani qaytaradi.
Satrlar va pool yaratish:
- Satr literal yordamida:
// "salom" satr literal String s1 = "salom"; String s2 = "salom"; // s1 va s2 bir xil ob'ektga havola qiladi 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.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 (
==)Stringob'ektlariniequals()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