Junior
Kam reikalingas String Pool Java?
sobes.tech AI
Atsakymas iš AI
Java String Pool yra būtinas šiems tikslams:
- Atminties taupymas: Užkerta kelią dublikatų kūrimui eilutės literatūrose. Jei tokia pati reikšmė jau egzistuoja pool'e, naudojama nuoroda į ją.
- Našumo optimizavimas: Eilutės literatūrų palyginimas (
==) tampa greitas, nes lyginamos nuorodos, o ne turinys.
Kuriant eilutės literatūras (String s = "hello";), JVM pirmiausia tikrina String Pool. Jei "hello" jau yra, s nuoroda į esamą objektą. Jei ne, kuriamas naujas "hello" objektas pool'e, ir s nuoroda į jį.
Naudojant konstruktorių new String("hello") visada kuriamas naujas String objektas heap'e, nepriklausomai nuo pool'o. Norint jį įtraukti į pool'ą, reikia iškviesti intern() metodą.
// String Pool veikimo pavyzdys
String s1 = "hello"; // Tikrina pool'ą, sukuria jei reikia, nuoroda į pool'ą
String s2 = "hello"; // Tikrina pool'ą, randa esamą, taip pat nuoroda į pool'ą
System.out.println(s1 == s2); // true - nuorodos vienodos
String s3 = new String("hello"); // Kuria naują objektą heap'e
System.out.println(s1 == s3); // false - nuorodos skiriasi
String s4 = s3.intern(); // Tikrina pool'ą s3 turiniui.
// Kadangi "hello" jau yra pool'e (iš s1/s2),
// s4 nuoroda į pool'o objektą.
System.out.println(s1 == s4); // true - s1 ir s4 nuorodos į tą patį pool'o objektą