Sobes.tech
Junior

Čo je to pool reťazcov v Jave?

sobes.tech AI

Odpoveď od AI

Pool reťazcov (String Pool) je oblasť v heap (zásobník) JVM, kde sú uložené literály reťazcov. Keď JVM narazí na literál reťazca, najskôr skontroluje tento pool. Ak reťazec už existuje, vráti odkaz na existujúci objekt. Ak nie, vytvorí nový objekt reťazca v poole a vráti odkaz naň.

Výhody:

  • Úspora pamäte: Niekoľko odkazov môže ukazovať na ten istý objekt reťazca v poole.
  • Výkon: Porovnanie odkazov (==) na reťazce v poole je rýchlejšie ako porovnanie obsahu reťazcov (equals()).

Príklad:

// Vytvorí reťazec v poole (ak ešte neexistuje)
String s1 = "hello";

// Vráti odkaz na ten istý objekt "hello" z poole
String s2 = "hello";

// s1 a s2 odkazujú na ten istý objekt
System.out.println(s1 == s2); // Vypíše true

// Vytvorí nový objekt reťazca "hello" na heap, mimo poole
String s3 = new String("hello");

// s1 a s3 odkazujú na rôzne objekty
System.out.println(s1 == s3); // Vypíše false

// Obsah reťazcov je rovnaký
System.out.println(s1.equals(s3)); // Vypíše true

Metóda intern() môže byť použitá na explicitné pridanie reťazca vytvoreného pomocou new String() do poole alebo na získanie odkazu na existujúci reťazec v poole s rovnakým obsahom.

// Vytvorí nový objekt reťazca "world" na heap
String s4 = new String("world");

// Pridá "world" do poole (ak tam ešte nie je) a vráti odkaz
String s5 = s4.intern();

// Vytvorí reťazec v poole (odkaz na ten istý objekt, na ktorý teraz ukazuje s5)
String s6 = "world";

// s5 a s6 odkazujú na ten istý objekt v poole
System.out.println(s5 == s6); // Vypíše true