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-ում, անկախ String Pool-ից։ Դրա համար, որ այն ավելացվի պուլում, անհրաժեշտ է կանչել intern() մեթոդը։

// String Pool-ի գործածության օրինակ

String s1 = "hello"; // Ստուգում է String Pool-ը, անհրաժեշտության դեպքում ստեղծում, հղում է պուլին
String s2 = "hello"; // Ստուգում է String Pool-ը, գտնում է առկա մեկը, նույնպես հղում է պուլին

System.out.println(s1 == s2); // true - հղումները նույնն են

String s3 = new String("hello"); // Ստեղծում է նոր օբյեկտ heap-ում

System.out.println(s1 == s3); // false - հղումները տարբեր են

String s4 = s3.intern(); // Ստուգում է String Pool-ը s3-ի պարունակության համար։
                         // Քանի որ "hello" արդեն կա պուլում (s1/s2-ից),
                         // s4 հղվում է պուլում գտնվող օբյեկտին։

System.out.println(s1 == s4); // true - s1 և s4 հղվում են նույն օբյեկտին պուլում