Junior
Prečo nevytvárame reťazec pomocou konštruktora new String()?
sobes.tech AI
Odpoveď od AI
Vytvorenie reťazca pomocou new String() vždy vytvorí nový objekt String na halde, aj keď už reťazec s rovnakou hodnotou existuje v String Pool.
Naopak, literály reťazcov (napríklad "ahoj") sú umiestnené do String Pool. Ak už v String Pool existuje reťazec s rovnakou hodnotou, použije sa existujúci objekt. Použitie literálov umožňuje JVM optimalizovať využitie pamäte.
Týmto spôsobom new String() vedie k nadmernému využívaniu pamäte a môže znížiť výkon kvôli vytváraniu zbytočných objektov. Uprednostňujeme používanie literálov reťazcov alebo iných metód na tvorbu reťazcov (napríklad String.valueOf()) na úsporu zdrojov.
// Neodporúča sa. Vždy vytvorí nový objekt na halde.
String str1 = new String("ahoj");
// Odporúča sa. Používa String Pool, môže použiť existujúci objekt.
String str2 = "ahoj";
// Výsledok porovnania môže byť odlišný
System.out.println(str1 == str2); // Zvyčajne false, pretože sú to rôzne objekty