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
Stringdirettamente, senza invocarenewper 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 esempioPointoCircle.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 nuovaStringinvece 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 StringBuildernon è synchronized per operazioni multi-thread. Tuttavia, per programmi single-thread, StringBuilder, senza l'overhead della sincronizzazione, è più efficiente.
Last updated