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 հղվում են նույն օբյեկտին պուլում