Junior
Javaда жолдор пулу эмне?
sobes.tech AI
AIден жооп
String Pool (String Pool) JVMдин heap (жыйнак) бөлүмүндө жайгашкан жана жол тексттеринин литералдары сакталат. JVM жол тексттин литералын кездестиргенде, алгач бул пулду текшерет. Эгер жол текст алда канча бар болсо, анда ошол объектке шилтемени кайтарат. Эч болбосо, жаңы жол текст объектин пулга түзүп, ага шилтемени кайтарат.
Артыкчылыктары:
- Эстутумду үнөмдөө: Бир нече шилтемелер бир эле жол текст объектине пулда көрсөтө алат.
- Өндүрүмдүүлүк: Пулдагы жол тексттер үчүн шилтемелерди салыштыруу (==) мазмунун салыштыруудан (equals()) тезирээк.
Мисал:
// Пулда жол текст түзүү (эгер ал дагы жок болсо)
String s1 = "hello";
// Ошол эле "hello" объектине пулдан шилтемени кайтаруу
String s2 = "hello";
// s1 жана s2 бир эле объектке шилтеме кылат
System.out.println(s1 == s2); // true чыгарат
// Heapте жаңы "hello" жол текст объектин түзүү, пулда эмес
String s3 = new String("hello");
// s1 жана s3 ар башка объекттерге шилтеме кылат
System.out.println(s1 == s3); // false чыгарат
// Жол тексттердин мазмуну бирдей
System.out.println(s1.equals(s3)); // true чыгарат
intern() ыкмасы new String() менен түзүлгөн жол текстин ачык түрдө пулга кошуу же ошол мазмундагы пулдагы бар жол текстке шилтемени алуу үчүн колдонулушу мүмкүн.
// Heapте жаңы "world" жол текст объектин түзүү
String s4 = new String("world");
// "world" пулга кошуу (эгер ал дагы жок болсо) жана шилтемени кайтаруу
String s5 = s4.intern();
// Пулда жол текст түзүү (шилтеме азыр s5 көрсөтүп турган объектке)
String s6 = "world";
// s5 жана s6 бир эле объектке шилтеме кылат
System.out.println(s5 == s6); // true чыгарат