Junior
Na čo je v Jave potrebný String Pool?
sobes.tech AI
Odpoveď od AI
String Pool v Jave je potrebný pre:
- Úsporu pamäte: Zabráni vytváraniu duplikátov literálov reťazcov. Ak už v pooli existuje reťazec s rovnakou hodnotou, používa sa odkaz naň.
- Optimalizáciu výkonu: Porovnanie literálov reťazcov (
==) je rýchle, pretože sa porovnávajú odkazy, nie obsah reťazcov.
Pri vytváraní literálov reťazcov (String s = "hello";), JVM najskôr skontroluje String Pool. Ak "hello" už existuje, s odkazuje na existujúci objekt. Ak nie, vytvorí sa nový "hello" objekt v poole a s naň odkazuje.
Použitie konštruktora new String("hello") vždy vytvorí nový String objekt na halde, nezávisle od String Pool. Aby ste ho pridali do poolu, musíte zavolať metódu intern().
// Príklad fungovania String Pool
String s1 = "hello"; // Kontroluje String Pool, vytvorí ak je potrebné, odkazuje na pool
String s2 = "hello"; // Kontroluje String Pool, nájde existujúci, tiež odkazuje na pool
System.out.println(s1 == s2); // true - odkazy sú rovnaké
String s3 = new String("hello"); // Vytvára nový objekt na halde
System.out.println(s1 == s3); // false - odkazy sú odlišné
String s4 = s3.intern(); // Kontroluje String Pool pre obsah s3.
// Keďže "hello" je už v poole (z s1/s2),
// s4 odkazuje na objekt v poole.
System.out.println(s1 == s4); // true - s1 a s4 odkazujú na ten istý objekt v poole