Newsgroup: it.comp.lang.visual-basic
Titolo: [help]confronto vb-java sulle stringhe

scusate l'orrendo multi post (it.comp.lang.visulal-basic e
it.comp.java)
ma la questione riguarda ambedue i ng.
dal libro "visual basic 2010 " spiegato a mia  nonna di Mario De
Ghetto
(pg. 435)
...questo è dovuto alla particolarità dei tipi stringa: le variabili
sono differenti,ma i valori confluiscono nella stessa posizione in
memoria e, quindi, il riferimento è comune (a parità di valore di
stringa)
quindi
se ho
Dim str1 As String="prova"
Dim str2 As Strin="prova"
str1=str2
per quanto riguarda Java invece, i valori non confluiscono nella
stessa posizione in memoria giusto?
thanks, ciao, Jasmine
--
Wataya Noboru non doveva difendere nulla.Per questo 
poteva concentrare tutti i suoi sforzi nella conduzione
pura e semplice della battaglia. 
L'uccello che girava le viti del mondo,Murakami Haruki

 wrote:
'str1=str2
ops, non sono uguali, intendevo che puntano allo stesso valore


 wrote:
occhio che almeno in dotNet (in java non mi addentro)
le String SONO IMMUTABILI e variabili riferimento!
http://msdn.microsoft.com/it-it/library/cc437017(v=vs.71).aspx
con l'effetto ben spiegato nell'articolo che
dim nome as string="Pippo"
nome="Pluto"
punta a due zone diverse di memoria ...perchè butta via l'istanza1 e ne 
crea un altra "al volo"!....pensa che spreco di memoria e tempo 
macchina!
Se devi fare pesantemente concatenazioni di stringhe ....c'è 
stringbuilder che è molto simile (di fatto lo è) a un buffer di 
caratteri modificabili
http://msdn.microsoft.com/it-it/library/system.text.stringbuilder(v=VS.100).aspx
-- 
----- Italliaaaaa 3227! -----
Anche sul trono più alto del mondo, si sta seduti sul proprio culo.
( Michel de Montaigne )

macchina!
per� Pippo la lascia che se la porti via il garbage (se non �
referenziata da altre variabili)
(dovrebbe se ho capito bene essere cosi' in java)
per� non capisco questo per quanto riguarda vb...
se effettivamente dim nome as string ="pippo"
e dim NewNome as string="pippo"
e quindi sia nome che NewNome in vb puntano alla stessa locazione
di memoria (cosa che non mi sembra avvenga in java o c++ ad es.)
chi o cosa si accorge che pippo � la stessa zona di memoria?


 chi o cosa si accorge che pippo è la stessa zona di memoria?
Per .NET Nome e NewNome sono lo stesso oggetto. Per provarlo basta fare 
una cosa del genere:
  	Dim Nome As String = "pippo"
         Dim NewNome As String = "pippo"
         Dim Risultato As Boolean
         Risultato = Nome Is NewNome
         MessageBox.Show(Risultato.ToString)
Discorso diverso invece se si istanzia esplicitamente un nuovo oggetto 
stringa, ad esempio:
         Dim Nome As String = "pippo"
         Dim NewNome As New String("pippo")
-- 
Saluti
VITRIOL

         Dim NewNome As New String("pippo")
allora è dovuto a come è scritto String in Net ma è davvero
un casino.... anche se come dice Wodka ha la sua giustificazione
nel risparmio di memoria
però continuo a chiedermi cosa si accorge che sono lo stesso aggetto
in fase di compilazione?
praticamente io ho questa situazione qui
(dove le L con uno sforzo di immaginazione sono quadratini che
indicano locazioni in memoria e le \ sono frecce)
Dim str1 As String="pippo"
Dim str2 As String="pippo"
str1
     \
        \
          \
             \
               /LLLLLLLLLLLLLLLLLLLL
             /
           /
         /
str2   
str1 ed str2 in questo caso sono dei riferimenti che puntano allo
stesso valore
non mi è chiaro pero' questo
se io facessi ad es.
Dim n As Integer=1
Dim m As Integer=1
l'1 non fa cmq parte di due locazioni di memoria?
Sto facendo una confusione incredibile con questi concetti.
Ciao, Jasmine


 l'1 non fa cmq parte di due locazioni di memoria?
si, esatto. è la stringa che è un po' particolare.
.m
-- 
è corta

Una stringa č, 
ti ringrazio tantissimo: mi hai tolto un casino di confusione
che avevo in merito alla questione
ciao, Jasmine


 wrote:
non mi permetto di dissentire su NULLA con quanto detto da Mauro
....voglio solo aggiungere qualcosa(sperando di non sbagliare)
"Locazione di memoria" non ha senso in dotNet (e credo ne abbia poco 
anche in java)!
Magic word: "managed"
Pensala così....hai una sandbox in cui hai un pc virtuale con una cpu 
virtuale ed un compilatore virtuale! Quindi hai anche una memoria 
virtuale! E non ce ne frega nulla a che locazione di memoria sta un 
byte! Anzi non ce ne frega nulla (almeno in dotnet) nemmeno di quando 
distrugge la memoria ....il garbage collector il dotnet se lo gestisce 
da se...ed è anche abbastanza geloso di questa sua "incombenza": gli 
dici di distruggere una variabile ma se lui "è in altre 
faccende...affaccendato"...se ne frega e la libera "quando ha un po di 
tempo" libero per farlo!
SVINCOLATI dalla programmazione in C. Li potevi fare bellissimi, 
velocissimi, escamotage con i puntatori. Erano bellissimi se li sapevi 
fare!...purtroppo di fatto sono una porta aperta per gli hacker con il 
buffer underrun et similia !(ne abbiamo esempi anche durante agosto di 
pezzi importanti di sw che si sbriciolano per una variabile in 
overflow)
Tornando a noi
Le stringhe sono array di char...ossia array di byte (e puoi sfruttare 
questa caratteristica da sempre per la crittografia...in qualsiasi 
linguaggio!)
Dovresti anche chiarirti il concetto di BOXING UNBOXING
in 2 imprecisissime parole terra terra significa che se converti un 
reference type in value type (e viceversa) il processore si smazza un 
sacco di cicli CPU impegnando heap stack e chi più ne ha più ne metta!
Ora considerando anche quello che ti ha detto Mauro: stringhe un po 
reference un po value....pensa che casino!
Pensala così: le "STRINGHE" è una gestione ad alto livello di un array
In dotNet esiste stringBuilder che riprende il concetto di "buffer" 
caro a chi (come me) ha iniziato con il C.
In pratica con una string allochi sempre memoria...con una stringbuider 
allochi un buffer una volta sola e finchè "ci stà roba" non lo espande!
Secondo MSDN ed un articolo esterno ancora linkato se usi più di 4 
concatenazioni di stringhe usare stringbuilder da un vantaggio 
computazionale!
http://www.codeproject.com/KB/string/string.aspx
Saluti
-- 
----- Italliaaaaa 3227! -----
Ti prego, ti prego, non ci uccidere. Ti prego baby, lo sai che ti amo. 
Non avrei mai voluto lasciarti, non è stata colpa mia. Davvero, sono 
sincero. Quel giorno finì la benzina. Si bucò un pneumatico. Non avevo 
i soldi per il taxi! Il mio smoking non era arrivato in tempo dalla 
tintoria! Era venuto a trovarmi da lontano un amico che non vedevo da 
anni! Qualcuno mi rubò la macchina! Ci fu un terremoto! Una tremenda 
inondazione! Un'invasione di cavallette!
John Belushi [da "Blues Brothers"]

SVINCOLATI dalla programmazione in C. 
E' davvero difficile pensare ad oggetti, non so se ci riuscirň mai;
spero tanto di si.
Grazie anche a te
ciao, Jasmine


 spero tanto di si.
è facilissimo, lo fai tutti i giorni nella tua vita quotidiana :-), è 
tutto li il "segreto" pensare esattamente come penseresti normalmente e 
modellare i tuoi oggetti allo stesso modo.
.m
-- 
è corta

 che si chiama "String Interning".
Che esiste anche in Java a dire il vero, anche se non ï¿œ cosï¿œ immediato :D