Sobes.tech
Junior

Šta je pool stringova u Javi?

sobes.tech АИ

Одговор од АИ

String Pool (Pool stringova) je oblast u heap (stogu) JVM-a gde se čuvaju literalni stringovi. Kada JVM naiđe na literal stringa, prvo proverava ovaj pool. Ako string već postoji, vraća referencu na postojeći objekat. Ako ne, kreira novi string objekat u poolu i vraća referencu na njega.

Prednosti:

  • Ušteda memorije: Više referenci može ukazivati na isti string objekat u poolu.
  • Performanse: Poređenje referenci (==) za stringove u poolu je brže od poređenja sadržaja stringova (equals()).

Primer:

// Kreira string u poolu (ako već ne postoji)
String s1 = "hello";

// Vraća referencu na isti objekat "hello" iz poola
String s2 = "hello";

// s1 i s2 ukazuju na isti objekat
System.out.println(s1 == s2); // Ispisaće true

// Kreira novi string objekat "hello" na heap-u, van poola
String s3 = new String("hello");

// s1 i s3 ukazuju na različite objekte
System.out.println(s1 == s3); // Ispisaće false

// Sadržaj stringova je isti
System.out.println(s1.equals(s3)); // Ispisaće true

Metod intern() može se koristiti za eksplicitno dodavanje stringa kreiranog sa new String() u pool ili za dobijanje reference na postojeći string u poolu sa istim sadržajem.

// Kreira novi string objekat "world" na heap-u
String s4 = new String("world");

// Dodaje "world" u pool (ako već nije tamo) i vraća referencu
String s5 = s4.intern();

// Kreira string u poolu (referenca na isti objekat na koji sada ukazuje s5)
String s6 = "world";

// s5 i s6 ukazuju na isti objekat u poolu
System.out.println(s5 == s6); // Ispisaće true