Junior
Java-da sətir hovuzu nədir?
sobes.tech Süni İntellekt
AI-dan cavab
String havuzu (String pool), Java'nın yığın (heap) belleğinde özel bir alan olup, burada string literal'leri ve içe aktarılmış (interned) string'ler saklanır. Uning əsas məqsədi, eyni string dəyərlərinin təkrar istifadəsi ilə yaddaşın qənaət edilməsidir.
Necə işləyir:
Bir string literal yaradıldıqda (məsələn, "salam"), JVM əvvəlcə həmin dəyərə malik artıq stringin olub-olmadığını yoxlayır.
- Əgər string mövcuddursa: JVM, havuzdakı mövcud obyektə istinad edir, yeni obyekt yaratmadan.
- Əgər string mövcud deyilsə: JVM yeni
Stringobyekti yaradır və ona istinad edir.
Stringlərin yaradılması və havuz:
- String literal istifadə edərək:
// "salam" string literal'dir String s1 = "salam"; String s2 = "salam"; // s1 və s2 eyni obyektə istinad edir new String()konstruktoru ilə:String s3 = new String("dünya"); String s4 = new String("dünya"); // s3 və s4 fərqli obyektlərə istinad edir, baxmayaraq ki, dəyərləri eynidir. // "dünya" string literal poolda ola bilər, amma s3 və s4 obyektləri onun xaricindədir.intern()metodu ilə:String s5 = new String("java"); // intern() metodu, poolda belə bir stringin olub-olmadığını yoxlayır String s6 = s5.intern(); // Əgər varsa, pooldakı obyektə istinad edir. // Əks halda, cari stringi poola əlavə edir və ona istinad edir.
String havuzunun üstünlükləri:
- Yaddaş qənaəti: Təkrarlanan string obyektlərinin sayını azaldır.
- Performansın yaxşılaşdırılması: Literal stringlərin (
==) müqayisəsi,Stringobyektlərininequals()ilə müqayisəsindən daha sürətli ola bilər, əgər hər iki referans eyni obyektə işarə edirsə.
Vacib qeyd:
Stringləri == operatoru ilə müqayisə etmək, iki dəyişənin yaddaşda eyni obyektə istinad etdiyini yoxlayır. Stringlərin məzmununu müqayisə etmək üçün həmişə equals() metodundan istifadə edin.
String str1 = "abc"; // Poolda
String str2 = "abc"; // Poolda, eyni referans
String str3 = new String("abc"); // Pool xaricində
String str4 = str3.intern(); // Poolda, eyni referans, str1 və str2 ilə
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