Sobes.tech
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