Sobes.tech
Junior

Co je to pool řetězců v Java?

sobes.tech AI

Odpověď od AI

Pool řetězců (String Pool) je oblast v heap (haldě) JVM, kde jsou uloženy literály řetězců. Když JVM narazí na literál řetězce, nejprve zkontroluje tento pool. Pokud řetězec již existuje, vrátí odkaz na existující objekt. Pokud ne, vytvoří nový řetězec v poolu a vrátí odkaz na něj.

Výhody:

  • Úspora paměti: Několik odkazů může ukazovat na stejný řetězec v poolu.
  • Výkon: Porovnání odkazů (==) na řetězce v poolu je rychlejší než porovnání obsahu řetězců (equals()).

Příklad:

// Vytvoří řetězec v poolu (pokud ještě neexistuje)
String s1 = "hello";

// Vrátí odkaz na stejný objekt "hello" z poolu
String s2 = "hello";

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

// Vytvoří nový řetězec "hello" na heapu, mimo pool
String s3 = new String("hello");

// s1 a s3 odkazují na různé objekty
System.out.println(s1 == s3); // Vypíše false

// Obsah řetězců je stejný
System.out.println(s1.equals(s3)); // Vypíše true

Metoda intern() může být použita k explicitnímu přidání řetězce vytvořeného pomocí new String() do poolu nebo k získání odkazu na existující řetězec v poolu se stejným obsahem.

// Vytvoří nový řetězec "world" na heapu
String s4 = new String("world");

// Přidá "world" do poolu (pokud tam ještě není) a vrátí odkaz
String s5 = s4.intern();

// Vytvoří řetězec v poolu (odkaz na stejný objekt, na který nyní ukazuje s5)
String s6 = "world";

// s5 a s6 odkazují na stejný objekt v poolu
System.out.println(s5 == s6); // Vypíše true