Junior
Vorbește-mi despre clasa String în limbajul de programare Java.
sobes.tech AI
Răspuns de la AI
Clasa String în Java reprezintă o secvență imuabilă de caractere.
Caracteristici și particularități principale:
- Imuabilitate: După crearea unui obiect
String, conținutul său nu poate fi modificat. Orice operație care pare să modifice șirul (de exemplu, concatenarea) creează de fapt un nou obiectString. Acest lucru îmbunătățește securitatea și siguranța în medii multi-thread. - Suprasarcină a operatorului
+: Pentru șiruri, operatorul+a fost suprasarcinat pentru a realiza concatenarea. - Două moduri de creare:
- Cu un literal de șir:
String s1 = "Hello";- creat în pool-ul de șiruri (String Pool). - Cu ajutorul operatorului
new:String s2 = new String("World");- creat pe heap, poate crea un nou obiect chiar dacă există deja un literal similar în pool.
- Cu un literal de șir:
- Pool-ul de șiruri (String Pool): Zonă pe heap unde sunt stocate literalurile de șiruri pentru optimizarea memoriei. La crearea unui literal de șir, JVM verifică mai întâi pool-ul. Dacă șirul există deja, se returnează o referință la obiectul existent. Dacă nu, se creează un nou obiect și se adaugă în pool.
- Metode utile principale:
length(): Returnează lungimea șirului.charAt(int index): Returnează caracterul de la poziția specificată.substring(int beginIndex, int endIndex): Returnează un subșir.contains(CharSequence s): Verifică dacă șirul conține secvența de caractere specificată.indexOf(int ch)/indexOf(String str): Returnează prima poziție a apariției caracterului sau subșirului.equals(Object anObject): Compară conținutul șirurilor. Este important să folosițiequals()pentru compararea conținutului, nu==, care compară referințele.equalsIgnoreCase(String anotherString): Compară șirurile fără a ține cont de majuscule/minuscule.replace(char oldChar, char newChar)/replace(CharSequence target, CharSequence replacement): Înlocuiește caractere sau subșiruri.trim(): Elimină spațiile din începutul și sfârșitul șirului.split(String regex): Împarte șirul în subșiruri după separator.
Exemplu de creare și unele operații:
// Creare cu literal
String str1 = "Java";
// Creare cu new
String str2 = new String("Java");
// Concatenare
String str3 = str1 + " is amazing";
// Compararea conținutului (folosind equals, nu ==)
boolean areEqualContent = str1.equals(str2); // true
// Compararea referințelor (folosind ==)
boolean areEqualReference = (str1 == str2); // false
// Lungimea șirului
int length = str3.length();
// Obținerea caracterului
char firstChar = str1.charAt(0); // 'J'
// Verificare conținut
boolean containsIs = str3.contains("is"); // true
Imuabilitatea String poate duce la ineficiență în cazul modificărilor repetate ale șirului, deoarece de fiecare dată se creează un nou obiect. Pentru astfel de scenarii, este preferabil să folosiți StringBuilder sau StringBuffer.