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
// Ստեղծում է նոր տողային օբյեկտ "hello" heap-ում, ոչ թե պուլում
String s3 = new String("hello");
// s1 և s3 ցույց են տալիս տարբեր օբյեկտներին
System.out.println(s1 == s3); // Տպում է false
// Տողերի բովանդակությունը նույնն է
System.out.println(s1.equals(s3)); // Տպում է true
intern() մեթոդը կարող է օգտագործվել բացահայտորեն ավելացնելու new String()-ով ստեղծված տողը պուլում կամ ստանալու հղումը գոյություն ունեցող տողին պուլում նույն բովանդակությամբ:
// Ստեղծում է նոր տողային օբյեկտ "world" heap-ում
String s4 = new String("world");
// Ավելացնում է "world"-ը պուլում (եթե դեռ չկա) և վերադարձնում հղումը
String s5 = s4.intern();
// Ստեղծում է տող պուլում (հղում այն օբյեկտին, որի վրա այժմ ցույց է տալիս s5)
String s6 = "world";
// s5 և s6 ցույց են տալիս նույն օբյեկտին պուլում
System.out.println(s5 == s6); // Տպում է true