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"); // ქმნის ახალ ობიექტს heap-ზე

System.out.println(s1 == s3); // false - მისამართები განსხვავებულია

String s4 = s3.intern(); // ამოწმებს პულს s3-ის შიგთავსისთვის.
                         // რადგან "hello" უკვე პულშია (s1/s2),
                         // s4 მიენიჭება პულში არსებული ობიექტი.

System.out.println(s1 == s4); // true - s1 და s4 ერთნაირ ობიექტს მიენიჭება