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() მეთოდი შეიძლება გამოყენებულ იქნას explicitly დამატებისთვის 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