Σε ποιο σημείο της μνήμης της αποθήκευσης Java βρίσκονται τα αντικείμενα συμβολοσειράς;
sobes.tech AI
Απάντηση από AI
Στη Java, τα αντικείμενα συμβολοσειράς (String) αποθηκεύονται σε μια ειδική περιοχή μνήμης που ονομάζεται String Pool (δεξαμενή συμβολοσειρών), η οποία βρίσκεται στο Metaspace ή στο PermGen (σε παλαιότερες εκδόσεις JVM).
Όταν δημιουργείται ένας κυριολεκτικός συμβολοσειράς, η JVM ελέγχει τη δεξαμενή συμβολοσειρών: αν υπάρχει ήδη τέτοια συμβολοσειρά, επιστρέφεται μια αναφορά στο υπάρχον αντικείμενο· διαφορετικά, δημιουργείται ένα νέο αντικείμενο και τοποθετείται στη δεξαμενή. Αυτό βοηθά στην εξοικονόμηση μνήμης και στην επιτάχυνση της σύγκρισης συμβολοσειρών.
Αν μια συμβολοσειρά δημιουργείται μέσω του κατασκευαστή new String(), το αντικείμενο δημιουργείται στη στοίβα (heap) και δεν θα τοποθετηθεί αυτόματα στη String Pool, εκτός αν καλεστεί ρητά η μέθοδος intern().
Παράδειγμα:
String s1 = "hello"; // συμβολοσειρά στη δεξαμενή
String s2 = new String("hello"); // αντικείμενο στη στοίβα
String s3 = s2.intern(); // s3 αναφέρεται στη συμβολοσειρά στη δεξαμενή