Le stringhe in java sono rappresentate come degli oggetti della classe String; possono perciò essere create tramite l’operatore new.
String s = new String("Hello");
Esiste anche un modo alternativo per crearle (in questo caso sono dette stringhe letterali):
String s = "Hello";
La differenza principale è che, nel caso di new, viene creato un nuovo oggetto in memoria, invece, con la forma letterale, viene prima controllato se esiste già una stringa simile in una speciale area di memoria dedicata alle stringhe (String Pool); se esiste si ritorna un riferimento ad essa altrimenti si crea nuova e la si mette sempre nel string pool.
Esempio:
Str1 e str2 puntano alla stessa stringa in memoria (nello string pool).
Str3 invece, nonostante il contenuto della stringa sia uguale (abc) punta ad un’altra locazione di memoria.
Di conseguenza str1== str2 è vera; mentre str1== str3 è falsa.
L’uso delle stringhe letterali è da preferire, in quanto ottimizzano l’uso della memoria.
La caratteristica di usare lo string pool, non avviene solo alla creazione di una stringa, ma anche alla modifica: ogni volta che si tenta di modificare una stringa non si modifica effettivamente la variabile ma si crea una stringa nuova, o la si prende dal string pool.
Questa caratteristica delle stringhe è nota come immutabilità delle stringhe.
Esempio:
creiamo una stringa
String a = "abc";
e, subito dopo:
a = "World";
L’ultima istruzione modificata l’oggetto originario, che conteneva la stringa “abc”, ma crea una nuova stringa inizializzata con la stringa “World”. La vecchia stringa “abc” è rimasta in memoria intatta, senza nessuna modifica.
Anche l’assenza di metodi set, nelle stringhe, mette in evidenza la loro immutabilità.
Esempio Metodi Più Usati
String tmp = "HelloWorld"; int size = tmp.length();// Lunghezza stringa System.out.println(size); String min = tmp.toLowerCase();// trasforma tutto in minuscolo System.out.println(min); String max = tmp.toUpperCase();// trasforma tutto in maiuscolo System.out.println(max); String tmp2 = "Hello" + " World";// unione di stringhe String tmp3 = "Hello " + tmp; String r = tmp2.replace("H", "T");// sostituzione di caratteri int p = tmp2.indexOf("W");// posizione di un carattere specifico String t = tmp.substring(0,5);// sotto stringa HELLO String t2 = tmp.substring(5,10);// sotto stringa "WORLD" System.out.println(t); System.out.println(t2);
Video Lezione – Le Stringhe in Java