Sobes.tech
Junior
151

Milleks on Java-s vajalik String Pool?

Vastus AI-lt

sobes.tech AI

String Pool in Java on vajalik järgmiste eesmärkide jaoks:

  • Mälu kokkuhoid: Takistab string-literali duplikaatide loomist. Kui sama väärtusega string juba eksisteerib poolas, kasutatakse viidet sellele.
  • Jõudluse optimeerimine: String-literali võrdlus (==) muutub kiireks, kuna võrreldakse viiteid, mitte stringide sisu.

String-literale (String s = "hello";) loomisel kontrollib JVM kõigepealt String Pooli. Kui "hello" juba eksisteerib, viitab s olemasolevale objektile. Kui ei, luuakse uus "hello" objekt poolas ja s viitab sellele.

Konstruktor new String("hello") loob alati uue String objekti heapil, sõltumata poolast. Selle lisamiseks poola tuleb kutsuda välja meetod intern().

// String Pooli töö näide

String s1 = "hello"; // Kontrollib poola, loob vajadusel, viitab poolale
String s2 = "hello"; // Kontrollib poola, leiab olemasoleva, samuti viitab poolale

System.out.println(s1 == s2); // true - viited on samad

String s3 = new String("hello"); // Loob uue objekti heapil

System.out.println(s1 == s3); // false - viited on erinevad

String s4 = s3.intern(); // Kontrollib poola s3 sisu jaoks.
                         // Kuna "hello" on juba poolas (s1/s2),
                         // s4 viitab poolas olevale objektile.

System.out.println(s1 == s4); // true - s1 ja s4 viitavad samale objektile poolas