Junior
Ce este un pool de șiruri în Java?
sobes.tech AI
Răspuns de la AI
Pool-ul de șiruri (String Pool) este o zonă din heap-ul JVM unde sunt stocate literalii de șiruri. Când JVM întâlnește un literal de șir, verifică mai întâi acest pool. Dacă șirul există deja, se returnează o referință la obiectul existent. Dacă nu, se creează un nou obiect de șir în pool și se returnează o referință către acesta.
Avantaje:
- Economisirea memoriei: Mai multe referințe pot indica același obiect de șir din pool.
- Performanță: Compararea referințelor (==) pentru șirurile din pool este mai rapidă decât compararea conținutului șirurilor (equals()).
Exemplu:
// Creează un șir în pool (dacă nu există deja)
String s1 = "hello";
// Returnează o referință la același obiect "hello" din pool
String s2 = "hello";
// s1 și s2 indică același obiect
System.out.println(s1 == s2); // Va afișa true
// Creează un nou obiect de șir "hello" în heap, nu în pool
String s3 = new String("hello");
// s1 și s3 indică obiecte diferite
System.out.println(s1 == s3); // Va afișa false
// Conținutul șirurilor este identic
System.out.println(s1.equals(s3)); // Va afișa true
Metoda intern() poate fi folosită pentru a adăuga explicit un șir creat cu new String() în pool sau pentru a obține o referință la un șir existent în pool cu același conținut.
// Creează un nou obiect de șir "world" în heap
String s4 = new String("world");
// Adaugă "world" în pool (dacă nu este deja acolo) și returnează referința
String s5 = s4.intern();
// Creează un șir în pool (referință la același obiect la care acum indică s5)
String s6 = "world";
// s5 și s6 indică același obiect în pool
System.out.println(s5 == s6); // Va afișa true