Sobes.tech
Junior

Mi az a sztring pool Java-ban?

sobes.tech MI

Válasz az MI-től

A String Pool (String Pool) a JVM heap (halom) területén található, ahol a string literálokat tárolják. Amikor a JVM egy string literált talál, először ezt a pool-t ellenőrzi. Ha a string már létezik, akkor egy hivatkozást ad vissza a meglévő objektumra. Ha nem, akkor egy új string objektumot hoz létre a pool-ban, és egy hivatkozást ad vissza rá.

Előnyök:

  • Memória megtakarítás: Több hivatkozás is mutathat ugyanarra a string objektumra a pool-ban.
  • Teljesítmény: A hivatkozások összehasonlítása (==) a pool-ban lévő stringek esetén gyorsabb, mint a stringek tartalmának összehasonlítása (equals()).

Példa:

// String létrehozása a pool-ban (ha még nem létezik)
String s1 = "hello";

// Hivatkozás ugyanarra az "hello" objektumra a pool-ból
String s2 = "hello";

// s1 és s2 ugyanarra az objektumra mutat
System.out.println(s1 == s2); // Igazat fog kiírni

// Új string objektum létrehozása a heap-en, nem a pool-ban
String s3 = new String("hello");

// s1 és s3 különböző objektumokra mutat
System.out.println(s1 == s3); // Hamisat fog kiírni

// A stringek tartalma megegyezik
System.out.println(s1.equals(s3)); // Igazat fog kiírni

Az intern() metódus használható arra, hogy kifejezetten hozzáadjon egy new String()-el létrehozott stringet a pool-hoz, vagy hogy egy meglévő stringre hivatkozást szerezzen ugyanazzal a tartalommal.

// Új string objektum létrehozása "world"-vel a heap-en
String s4 = new String("world");

// "world" hozzáadása a pool-hoz (ha még nincs ott), és hivatkozás visszaadása
String s5 = s4.intern();

// String létrehozása a pool-ban (hivatkozás ugyanarra az objektumra, amire most s5 mutat)
String s6 = "world";

// s5 és s6 ugyanarra az objektumra mutat a pool-ban
System.out.println(s5 == s6); // Igazat fog kiírni