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