Newsgroup: it.comp.java
Titolo: AIUTO: String e stringBuffer

Non ho assolutamente capito la differenza che c'č fra String e stringBuffer
e quando va usata l'una o l'altra classe.
Qualcuno sarebbe cosě gentile da spiegarmi queste cose? Grazie a tutti.
--
Ciao by Beppe
Solo chi č stupido non cambia mai idea
(Aldo, Cosě č la vita)

 --
beh sono due classi diverse, con metodi diversi.
Ad esempio con stringBuffer hai la possibilità di settare la
lunghezza massima della Stringa, di tagliarla, se vai a vedere la
documentazione di
java.lang, che sicuramente trovi su 
java.sun.com
, puoi esaminare tutte le
differenze :-)
comunque ti dico qualcuno dei metodi che di solito si utilizzano di più:
buf.append("ciao")  è equivalente a  str += "ciao"
buf.insert(3, "inserito dopo il 3 carattere")
buf.reverse()  --> ribalta la stringa! [esempio = oipmese]
ciao,
ventu
--
"Io ti guarderò mentre, con le tue mani, ucciderai tutte le donne nelle
stanze del piacere"
"Zio!"
"Accetterai la tua punizione e ne farai tesoro" ribattè il barone.
       DUNE, Frank Herbert

 Qualcuno sarebbe così gentile da spiegarmi queste cose? Grazie a tutti.
StringBuffer è la classe "compagna" di String. String è una classe immutabile,
nel senso che non può mai essere modificata: ogni metodo che apparentemente lo
fa, in realtà crea un nuovo oggetto. questa cosa è molto comoda per tutta una
serie di motivi (che puoi approfondire studiando l' "Immutable Pattern") ma
crea un certo overhead all'algoritmo di garbage collecting se si utilizza la
Stringa non solo come contenitore di caratteri, ma anche per lavorarci su. Se
serve fare molte modifiche, bisogna dunque utilizzare uno StringBuffer, che ha
invece un design completamente diverso, e poi convertire in String a lavoro
fatto. Diciamo che se String non fosse "immutabile" non ci sarebbe bisogno di
Stringbuffer. Insomma esistono tutte e due perchè a tutt'oggi non c'è un design
per una classe Stringa che si comporti al meglio in tutte le varie occasioni
(quando si devono soprattutto mantenere liste di caratteri, e quando invece
soprattutto ci si lavora sopra modificando i caratteri esistenti).
Sapendolo, si usa l'una o l'altra a seconda del contesto. Su Thinking in Java
l'argomento è trattato approfonditamente: se non l'hai già fatto, scaricalo.
ciao
--
Ugo
__________________________________________________________________________
"La perfezione si ottiene non quando non c'è nient'altro da aggiungere,
 bensì quando non c'è più niente da togliere." Antoine de Saint-Exupéry
__________________________________________________________________________
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Enterprise Java Consulting
@mail: Ugo.L...@Flashnet.it
Home Page: 
http://www.ugolandini.net
Mentoring: 
http://www.projectoo.com
Work Phone: 02/61860647-6-4 06/58332267
Cell Phone: 0347/6310749 - 0347/4783580
Fax Phone: 02/700 413 187
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 differenze :-)
Le differenze sono però soprattutto a livello di progettazzione, e non si
vedono andando a guardare quali metodi ha l'una e quale l'altra, semmai
andando a vedere i sorgenti dell'una o dell'altra. Uno potrebbe sempre
chiedersi, giustamente: perchè tutti questi metodi non sono concentrati in
una delle due?
ciao



Sai che ti dico? Ho ancora molto da imparare su questo linguaggio..
A dire la verità,     quello che sapevo su StringBuffer l'ho letto su un
libro che se non sbaglio era
"Programmare in java" che presentava _java come linguaggio potente perchè
capace
di numerose operazioni sulle stringhe di caratteri..
ciao,
ventu

 Le differenze sono però soprattutto a livello di progettazzione,
progettazione, ci tengo alla grammatica ;)
--


Qualcuno sarebbe cosě gentile da spiegarmi queste cose? Grazie a tutti.
String incapsula l'idea di un oggetto non modificabile. E' un "carrier", un po' 
come Integer, Double, etc: una volta creato l'oggetto, non c'e' verso di 
modificarne il contenuto (a meno di modifiche "minori": uppercase, lowercase, 
eccetera).
StringBuffer, invece, incapsula l'idea di una stringa in costruzione, fornendo 
il servizio "append".
La confusione e' (forse) dovuta all'esistenza dell'operatore di concatenazione 
+ ,che permette, usando String, di ottenere risultati logici simili a quelli 
ottenuti con StringBuffer.
Tieni presente che pero' + *crea* oggetti nuovi: non modifica oggetti 
esistenti. 
Cioe', con
    	String s1 = "hello ";
    	String s2 = "world";
    	String s3 = s1+s2;
ti trovi con 3 oggetti distinti (che incapsulano "hello", "world" e "hello 
world").
Al contrario, con StringBuffer,
 StringBuffer sb = new StringBuffer("hello ");
 sb.append(" world");
 String s3 = sb.toString();
hai due soli oggetti, il buffer e la String risultante, appunto.
In sintesi: dal punto di vista puramente logico, tutto cio' che puoi fare con 
StringBuffer lo puoi fare con String e +. Pero' usare questi ultimi ha come 
side effect la proliferazione di oggetti, e minori performance (dovute 
all'overhead di costruzione degli oggetti, appunto). 
Quindi, appena puoi, usa StringBuffer quando stai "costruendo" stringhe.
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun

 world").
Oserei aggiungere, se non mi ricordo male, che in effetti quando si fa la somma di
due stringhe in realtà quel che succede è l'istanziazione di uno StringBuffer, al
quale vengono appese le due stringhe, per poi chiamarvi sopra un toString(). Ossia
String s3 = (new StringBuffer(s1).append(s2)).toString();
Se invece mi ricordo male, correggetemi... una cosa del genere (mi) è molto
importante dal lato delle performances...
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

Ti ringrazio tantissimo, tu e tutti gli altri che hanno risposto.
spero, in futuro, quando le mie conoscenze si saranno consolidate, di poter
aiutare uno di NOI!!!
Intanto ciao e alla prossima richiesta!!
--
Ciao by Beppe
Solo chi č stupido non cambia mai idea
(Aldo, Cosě č la vita)