Junior
Μίλησέ μου για την κλάση String στη γλώσσα προγραμματισμού Java.
sobes.tech AI
Απάντηση από AI
Η κλάση String στη Java αντιπροσωπεύει μια αμετάβλητη ακολουθία χαρακτήρων.
Κύχα χαρακτηριστικά και ιδιαιτερότητες:
- Αμεταβλητότητα: Μετά τη δημιουργία ενός αντικειμένου
String, το περιεχόμενό του δεν μπορεί να αλλάξει. Οποιαδήποτε λειτουργία που φαίνεται να τροποποιεί τη συμβολοσειρά (π.χ. συνημμένη) δημιουργεί στην πραγματικότητα ένα νέο αντικείμενοString. Αυτό βελτιώνει την ασφάλεια και την ασφάλεια σε περιβάλλοντα πολλαπλών νημάτων. - Υπερφόρτωση του τελεστή
+: Για τις συμβολοσειρές, ο τελεστής+έχει υπερφορτωθεί για να πραγματοποιεί συνημμένη. - Δύο τρόποι δημιουργίας:
- Με ένα κυριολεκτικό συμβολοσειράς:
String s1 = "Hello";- δημιουργείται στη δεξαμενή συμβολοσειρών (String Pool). - Με τη χρήση του τελεστή
new:String s2 = new String("World");- δημιουργείται στη σωρό (Heap), μπορεί να δημιουργήσει ένα νέο αντικείμενο ακόμη και αν υπάρχει ήδη ένα ίδιο κυριολεκτικό στη δεξαμενή.
- Με ένα κυριολεκτικό συμβολοσειράς:
- Δεξαμενή συμβολοσειρών (String Pool): Περιοχή στη σωρό όπου αποθηκεύονται τα κυριολεκτικά συμβολοσειρών για βελτιστοποίηση μνήμης. Κατά τη δημιουργία ενός κυριολεκτικού συμβολοσειράς, η JVM ελέγχει πρώτα τη δεξαμενή. Αν ήδη υπάρχει, επιστρέφει μια αναφορά στο υπάρχον αντικείμενο. Αν όχι, δημιουργεί ένα νέο αντικείμενο και το τοποθετεί στη δεξαμενή.
- Βασικές χρήσιμες μέθοδοι:
length(): Επιστρέφει το μήκος της συμβολοσειράς.charAt(int index): Επιστρέφει το χαρακτήρα στη συγκεκριμένη θέση.substring(int beginIndex, int endIndex): Επιστρέφει μια υπο-συμβολοσειρά.contains(CharSequence s): Ελέγχει αν η συμβολοσειρά περιέχει την καθορισμένη ακολουθία χαρακτήρων.indexOf(int ch)/indexOf(String str): Επιστρέφει τη θέση της πρώτης εμφάνισης του χαρακτήρα ή της υπο-συμβολοσειράς.equals(Object anObject): Συγκρίνει το περιεχόμενο των συμβολοσειρών. Είναι σημαντικό να χρησιμοποιείτεequals()για σύγκριση περιεχομένου, όχι==, που συγκρίνει αναφορές.equalsIgnoreCase(String anotherString): Συγκρίνει συμβολοσειρές χωρίς να λαμβάνει υπόψη το κεφαλαίο/πεζό.replace(char oldChar, char newChar)/replace(CharSequence target, CharSequence replacement): Αντικαθιστά χαρακτήρες ή υπο-συμβολοσειρές.trim(): Αφαιρεί κενά διαστήματα από την αρχή και το τέλος.split(String regex): Χωρίζει τη συμβολοσειρά σε υπο-συμβολοσειρές με βάση τον διαχωριστή.
Παράδειγμα δημιουργίας και ορισμένων λειτουργιών:
// Δημιουργία με κυριολεκτικό
String str1 = "Java";
// Δημιουργία με new
String str2 = new String("Java");
// Συνημμένη
String str3 = str1 + " is amazing";
// Σύγκριση περιεχομένου (χρησιμοποιώντας equals, όχι ==)
boolean areEqualContent = str1.equals(str2); // true
// Σύγκριση αναφορών (χρησιμοποιώντας ==)
boolean areEqualReference = (str1 == str2); // false
// Μήκος συμβολοσειράς
int length = str3.length();
// Λήψη χαρακτήρα
char firstChar = str1.charAt(0); // 'J'
// Έλεγχος περιεχομένου
boolean containsIs = str3.contains("is"); // true
Η αμεταβλητότητα του String μπορεί να οδηγήσει σε αναποτελεσματικότητα σε επαναλαμβανόμενες τροποποιήσεις της συμβολοσειράς, καθώς κάθε φορά δημιουργείται ένα νέο αντικείμενο. Για τέτοια σενάρια, προτιμάται η χρήση StringBuilder ή StringBuffer.