Sobes.tech
Junior

Kam ir nepieciešams String Pool Java?

sobes.tech AI

Atbilde no AI

Java String Pool ir nepieciešams šādiem mērķiem:

  • Atmiņas taupīšana: Novērš dublētu string literalu izveidi. Ja tāds pats vērtības string jau pastāv poolā, tiek izmantota atsauce uz to.
  • Veiktspējas optimizācija: String literalu salīdzināšana (==) kļūst ātra, jo tiek salīdzinātas atsauces, nevis stringu saturs.

Veidojot string literalus (String s = "hello";), JVM vispirms pārbauda String Pool. Ja "hello" jau pastāv, s atsaucas uz esošo objektu. Ja nē, tiek izveidots jauns "hello" objekts poolā, un s atsaucas uz to.

new String("hello") konstruktors vienmēr izveido jaunu String objektu heapā, neatkarīgi no pool. Lai to pievienotu pool, ir jāizsauc intern() metode.

// String Pool darbības piemērs

String s1 = "hello"; // Pārbauda pool, ja nepieciešams, izveido, atsauce uz pool
String s2 = "hello"; // Pārbauda pool, atrod esošo, arī atsauce uz pool

System.out.println(s1 == s2); // true - atsauces ir vienādas

String s3 = new String("hello"); // Izveido jaunu objektu heapā

System.out.println(s1 == s3); // false - atsauces ir dažādas

String s4 = s3.intern(); // Pārbauda pool s3 saturu.
                         // Tā kā "hello" jau ir poolā (no s1/s2),
                         // s4 atsaucas uz pool objektu.

System.out.println(s1 == s4); // true - s1 un s4 atsaucas uz to pašu pool objektu