Sobes.tech
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