Sobes.tech
Junior

Miért nem hozunk létre egy sztringet a new String() konstruktor segítségével?

sobes.tech MI

Válasz az MI-től

A new String() használatával létrehozott sztring mindig új String objektumot hoz létre a heap-en, még akkor is, ha ugyanazzal az értékkel rendelkező sztring már létezik a String Pool-ban.

Ezzel szemben a sztring literálok (például "hello") a String Pool-ba kerülnek. Ha már létezik egy ilyen értékű sztring a String Pool-ban, akkor az meglévő objektum kerül felhasználásra. A literálok használata lehetővé teszi a JVM számára, hogy optimalizálja a memóriahasználatot.

Ezért a new String() túlzott memóriafogyasztáshoz vezethet, és csökkentheti a teljesítményt azzal, hogy felesleges objektumokat hoz létre. Előnyben részesítjük a sztring literálokat vagy más sztringkészítési módszereket (például String.valueOf()) a források megtakarítása érdekében.

// Nem ajánlott. Mindig új objektumot hoz létre a heap-en.
String str1 = new String("hello");

// Ajánlott. A String Pool-t használja, létező objektumot is használhat.
String str2 = "hello";

// A összehasonlítás eredménye eltérő lehet
System.out.println(str1 == str2); // Általában false, mert külön objektumok