Sobes.tech
Junior

Proč ne vytváříme řetězec pomocí konstruktoru new String()?

sobes.tech AI

Odpověď od AI

Vytvoření řetězce pomocí new String() vždy vytvoří nový objekt String na haldě, i když již řetězec se stejnou hodnotou existuje v String Pool.

Naopak, literály řetězců (například "ahoj") jsou umístěny do String Pool. Pokud již v String Pool existuje řetězec se stejnou hodnotou, je použit stávající objekt. Použití literálů umožňuje JVM optimalizovat využití paměti.

Tím pádem new String() vede k nadměrnému využívání paměti a může snížit výkon kvůli vytváření zbytečných objektů. Dáváme přednost používání literálů řetězců nebo jiných metod tvorby řetězců (například String.valueOf()) pro úsporu zdrojů.

// Nedoporučuje se. Vždy vytvoří nový objekt na haldě.
String str1 = new String("ahoj");

// Doporučuje se. Používá String Pool, může použít existující objekt.
String str2 = "ahoj";

// Výsledek porovnání může být odlišný
System.out.println(str1 == str2); // Obvykle false, protože jsou to různé objekty