Sobes.tech
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