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 invocare new per creare un'istanza di String da asseganre alla variabile.

  • l'operatore '+' è overloaded per concatenare due operandi di tipoString. l'operatore + non funziona con altri oggetti di tipo ad esempio Point o Circle.

  • Un oggetto di tipo String è immutabile. Infatti il contenuto non può essere modificatouna volta che l'ggetto di tipo String è creato. Ad esempio il metodo toUpperCase() costruisce e ritorna una nuova String invece di modificare il contenuto dell'oggetto String.

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