Sobes.tech
Junior

Czym jest pula łańcuchów w Java?

sobes.tech AI

Odpowiedź od AI

Pool łańcuchów (String Pool) to obszar w heap (stosie) JVM, w którym przechowywane są literały łańcuchowe. Gdy JVM napotyka literał łańcuchowy, najpierw sprawdza ten pool. Jeśli łańcuch już istnieje, zwraca odwołanie do istniejącego obiektu. Jeśli nie, tworzy nowy obiekt łańcuchowy w poolu i zwraca odwołanie do niego.

Zalety:

  • Oszczędność pamięci: Kilka odwołań może wskazywać na ten sam obiekt łańcuchowy w poolu.
  • Wydajność: Porównanie odwołań (==) do łańcuchów w poolu jest szybsze niż porównanie zawartości łańcuchów (equals()).

Przykład:

// Tworzy łańcuch w poolu (jeśli jeszcze go tam nie ma)
String s1 = "hello";

// Zwraca odwołanie do tego samego obiektu "hello" z poola
String s2 = "hello";

// s1 i s2 wskazują na ten sam obiekt
System.out.println(s1 == s2); // Wyświetli true

// Tworzy nowy obiekt łańcuchowy "hello" na heapie, nie w poolu
String s3 = new String("hello");

// s1 i s3 wskazują na różne obiekty
System.out.println(s1 == s3); // Wyświetli false

// Zawartość łańcuchów jest taka sama
System.out.println(s1.equals(s3)); // Wyświetli true

Metoda intern() może być używana do jawnego dodania łańcucha utworzonego za pomocą new String() do poola lub do uzyskania odwołania do istniejącego łańcucha w poolu o tym samym zawartości.

// Tworzy nowy obiekt łańcuchowy "world" na heapie
String s4 = new String("world");

// Dodaje "world" do poola (jeśli jeszcze tam nie ma) i zwraca odwołanie
String s5 = s4.intern();

// Tworzy łańcuch w poolu (odwołanie do tego samego obiektu, na który teraz wskazuje s5)
String s6 = "world";

// s5 i s6 wskazują na ten sam obiekt w poolu
System.out.println(s5 == s6); // Wyświetli true