Sobes.tech
Junior

La ce servește String Pool în Java?

sobes.tech AI

Răspuns de la AI

Pool-ul de șiruri în Java este necesar pentru:

  • Economisirea memoriei: Previne crearea duplicatelor de literali de șiruri. Dacă un șir cu aceeași valoare există deja în pool, se folosește o referință la acesta.
  • Optimizarea performanței: Compararea literale de șiruri (==) devine rapidă, deoarece compară referințele, nu conținutul șirurilor.

Când se creează literali de șiruri (String s = "hello";), JVM verifică mai întâi pool-ul de șiruri. Dacă "hello" există deja, s face referire la obiectul existent. Dacă nu, se creează un nou obiect "hello" în pool, iar s face referire la acesta.

Utilizarea constructorului new String("hello") crează întotdeauna un nou obiect String în heap, independent de pool-ul de șiruri. Pentru a-l plasa în pool, trebuie apelată metoda intern().

// Exemplu de funcționare a pool-ului de șiruri

String s1 = "hello"; // Verifică pool-ul, creează dacă este necesar, face referire la pool
String s2 = "hello"; // Verifică pool-ul, găsește cel existent, face referire și el la pool

System.out.println(s1 == s2); // true - referințele sunt identice

String s3 = new String("hello"); // Creează un nou obiect în heap

System.out.println(s1 == s3); // false - referințele sunt diferite

String s4 = s3.intern(); // Verifică pool-ul pentru conținutul lui s3.
                         // Deoarece "hello" este deja în pool (din s1/s2),
                         // s4 face referire la obiectul din pool.

System.out.println(s1 == s4); // true - s1 și s4 fac referire la același obiect din pool