Sobes.tech
Junior

Parlami della classe String nel linguaggio di programmazione Java.

sobes.tech AI

Risposta dell'AI

La classe String in Java rappresenta una sequenza immutabile di caratteri.

Caratteristiche principali e peculiarità:

  • Immutabilità: Dopo aver creato un oggetto String, il suo contenuto non può essere modificato. Qualsiasi operazione che sembri modificare la stringa (ad esempio, la concatenazione) crea in realtà un nuovo oggetto String. Questo migliora la sicurezza e la sicurezza in ambienti multithread.
  • Sovraccarico dell’operatore +: Per le stringhe, l’operatore + è stato sovraccaricato per eseguire la concatenazione.
  • Due modi di creazione:
    • Con un literal di stringa: String s1 = "Hello"; - creato nel pool di stringhe (String Pool).
    • Con l’uso dell’operatore new: String s2 = new String("World"); - creato nell’heap, può creare un nuovo oggetto anche se esiste già un literal uguale nel pool.
  • Pool di stringhe (String Pool): Area nell’heap dove vengono memorizzati i literal di stringa per ottimizzare la memoria. Quando si crea un literal di stringa, la JVM verifica prima il pool. Se la stringa esiste già, viene restituita una referenza all’oggetto esistente. Se non, viene creato un nuovo oggetto e inserito nel pool.
  • Metodi utili principali:
    • length(): Restituisce la lunghezza della stringa.
    • charAt(int index): Restituisce il carattere alla posizione specificata.
    • substring(int beginIndex, int endIndex): Restituisce una sottostringa.
    • contains(CharSequence s): Verifica se la stringa contiene la sequenza di caratteri specificata.
    • indexOf(int ch) / indexOf(String str): Restituisce la prima posizione dell’occorrenza del carattere o della sottostringa.
    • equals(Object anObject): Confronta il contenuto delle stringhe. È importante usare equals() per confrontare il contenuto, non ==, che confronta le referenze.
    • equalsIgnoreCase(String anotherString): Confronta le stringhe senza considerare le maiuscole/minuscole.
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Sostituisce caratteri o sottostringhe.
    • trim(): Rimuove gli spazi all’inizio e alla fine.
    • split(String regex): Divide la stringa in sottostringhe in base al delimitatore.

Esempio di creazione e alcune operazioni:

// Creazione con literal
String str1 = "Java";

// Creazione con new
String str2 = new String("Java");

// Concatenazione
String str3 = str1 + " is amazing";

// Confronto del contenuto (usando equals, non ==)
boolean areEqualContent = str1.equals(str2); // true

// Confronto delle referenze (usando ==)
boolean areEqualReference = (str1 == str2); // false

// Lunghezza della stringa
int length = str3.length();

// Ottenere il carattere
char firstChar = str1.charAt(0); // 'J'

// Verifica di contenuto
boolean containsIs = str3.contains("is"); // true

L’immutabilità di String può portare a inefficienze nelle modifiche ripetute della stringa, poiché ogni volta viene creato un nuovo oggetto. Per tali scenari, è preferibile usare StringBuilder o StringBuffer.