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