Sobes.tech
Junior

Τι είναι η ομάδα συμβολοσειρών στη Java;

sobes.tech AI

Απάντηση από AI

Ο String Pool (Αποθετήριο Συμβολοσειρών) είναι μια περιοχή στη heap (στοίβα) της JVM όπου αποθηκεύονται οι λεκτικοί συμβολοσειρών. Όταν η 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