Junior
Miért szükséges a String Pool Java-ban?
sobes.tech MI
Válasz az MI-től
A String Pool Java-ban szükséges a következők miatt:
- Memória megtakarítás: Megakadályozza a duplikált string literálok létrehozását. Ha egy ugyanolyan értékű string már létezik a poolban, akkor egy hivatkozást használunk rá.
- Teljesítmény optimalizálás: A string literálok összehasonlítása (
==) gyorsabbá válik, mivel a hivatkozásokat hasonlítjuk össze, nem a stringek tartalmát.
String literálokat (String s = "hello";) létrehozva, a JVM először ellenőrzi a String Pool-t. Ha az "hello" már létezik, a s a meglévő objektumra hivatkozik. Ha nem, akkor egy új "hello" objektum jön létre a poolban, és a s erre mutat.
A new String("hello") konstruktor mindig új String objektumot hoz létre a heapen, függetlenül a String Pool-tól. Ahhoz, hogy a poolba helyezzük, az intern() metódust kell hívni.
// String Pool működésének példája
String s1 = "hello"; // Ellenőrzi a Pool-t, szükség szerint létrehoz, a poolra hivatkozik
String s2 = "hello"; // Ellenőrzi a Pool-t, megtalálja a meglévőt, szintén a poolra hivatkozik
System.out.println(s1 == s2); // true - ugyanarra az objektumra mutatnak
String s3 = new String("hello"); // Új objektumot hoz létre a heapen
System.out.println(s1 == s3); // false - különböző objektumokra mutatnak
String s4 = s3.intern(); // Ellenőrzi a Pool-t s3 tartalmára.
// Mivel az "hello" már benne van a poolban (s1/s2),
// s4 a poolban lévő objektumra mutat.
System.out.println(s1 == s4); // true - s1 és s4 ugyanarra az objektumra mutat a poolban