Sobes.tech
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 бирдей объектке шилтеме кылат