String è speciale
Una String
in Java, contiene una sequenza immutabile di caratteri unicode. A differenza del C/C++ dove una stringa è semplicemente un array di char , una String
in Java è una classe di java.lang
.
Una String
in Java è comunque spaciale. A differenza di una classe ordinaria:
Una String è associata con una string literal che ha la forma di un testo tra doppie virgolette, esempio: "Hello World". Si può assegnate una string literal direttamente a una variabile di tipo
String
direttamente, senza invocarenew
per creare un'istanza di String da asseganre alla variabile.l'operatore '+' è overloaded per concatenare due operandi di tipo
String
. l'operatore + non funziona con altri oggetti di tipo ad esempioPoint
oCircle
.Un oggetto di tipo
String
è immutabile. Infatti il contenuto non può essere modificatouna volta che l'ggetto di tipoString
è creato. Ad esempio il metodotoUpperCase()
costruisce e ritorna una nuovaString
invece di modificare il contenuto dell'oggettoString
.
Vedi per tutorial: http://www3.ntu.edu.sg/home/ehchua/programming/java/J3d_String.html
Esempi: https://github.com/checksound/StringIsSpecial
StringBuffer & StringBuilder
Come detto, gli oggetti di tipo String sono immutabili perchè oggetti di tipo String literals con lo stesso contenuto condividono la stessa zona di memoria nel pool delle stinghe. La modifica di una stringa causerebbe anche la modifica anche di quelle che condividono la stessa zona di memoria.
Per modificare le stringhe il JDK fornisce due classi che supportano le stringhe mutabili. Le classi sonoStringBuffer
e StringBuilder
(nel package core java.lang
) . Un oggetto di StringBuffer
oStringBuilder
è come un oggetto ordinario, che sono memorizzati nello heap e non condivisi, e quindi, possono essere modificat senza effetti indesiderati su altri oggetti.
La classe StringBuilder
fu introdotta nel JDK 1.5. E' la stessa come funzionalità di StringBuffer
, unica differenza che StringBuilder
non è synchronized per operazioni multi-thread. Tuttavia, per programmi single-thread, StringBuilder
, senza l'overhead della sincronizzazione, è più efficiente.
Last updated