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