[ zdravkod @ 10.02.2006. 21:47 ] @
Pozdrav,

Imam sledece pitanje/nedoumicu. Interesuje me da li je moguce upravljati istim objektom uz pomoc 2 reference npr.

String s1 = new String("prvi string");
String s2 = s1;

u ovom trenutku ja imam dva objekta koji su isti i imaju vrednost "prvi string". E, sad kad kazem

s1 = "nesto";

imam da s1 ima vrednost "nesto", s2 je i dalje "prvi string". Mene interesuje da li je moguce izvesti da i s1 i s2 pokazuju na jedan isti objekat tako da prethodna naredba kao rezultat ima da i s1 i s2 imaju vrednost "nesto".

Zdravko
[ nemnesic @ 10.02.2006. 22:37 ] @
nisam nikada tako nesto radio
ali mislim da je nesto na ovo principu

http://mindprod.com/jgloss/pointer.html


--
Every Problem Has A Solution
[ migoran @ 10.02.2006. 23:09 ] @
Mozes pokusati sa nizovima ili StringBuffer klasom.

Code:


String[] s1 = {"Hello"};
String[] s2 = s1;
        
s1[0] = "Hello World!";
System.out.println(s2[0]);

//Hello World!


StringBuffer sb1 = new StringBuffer("Hello");
StringBuffer sb2 = sb1;

sb1.append(" World");
sb2.append("!");

System.out.println(sb1);
System.out.println(sb2);
    
//Hello World!
//Hello World!



Pozdrav,
Goran
[ mucky @ 10.02.2006. 23:33 ] @
Citat:
zdravkod:
String s1 = new String("prvi string");
String s2 = s1;

u ovom trenutku ja imam dva objekta koji su isti i imaju vrednost "prvi string".

Mislim da je izuzetno vazno da ti kazem (iako rizikujem da ispadnem cepidlaka, sto uopste nije slucaj) da si pogresio kada si rekao da imas dva objekta, i da je to kardinalna greska koja dovodi do konfuzija u vezi objekata i pointera, kao sto je ova tvoja.

Code:
String s1 = new String("prvi string");

Ova naredba radi sledece:
1) Deklarishe pointer na objekte tipa String (to je deo "String s1")
2) Kreira novi objekat tipa String, sa vrednoshcu "prvi string" (to je deo "new String("prvi string") ")
3) Dodeljuje adresu novonastalog objekta u pointer s1.

Code:
String s2 = s1;

Ova naredba radi sledece:
1) Deklarishe pointer na objekte tipa String (to je deo "String s2")
2) Dodeljuje vrednost pointera s1 pointeru s2 (tj. efektivno chini da pointer s2 pokazuje na isti String objekat na koji pokazuje i s1)

Dakle, kao sto si video, do ovog trenutka ti imas samo jedan objekat tipa String i dva pointera na taj isti objekat.


Citat:
E, sad kad kazem
s1 = "nesto";

imam da s1 ima vrednost "nesto", s2 je i dalje "prvi string". Mene interesuje da li je moguce izvesti da i s1 i s2 pokazuju na jedan isti objekat tako da prethodna naredba kao rezultat ima da i s1 i s2 imaju vrednost "nesto".


Ako si razumeo ono sto sam napisao ranije u poruci, razumeces da to sto ti zelis nije moguce, jer se u promenljivim s1 i s2 ne sadrze vrednosti objekata tipa String, nego samo adrese tih objekata, tako da ako zelis da oba pointera pokazuju na jedan te isti objekat, moras uvek dodati i ono
Code:
s2 = s1;


Eto toliko, nadam se da ti se malo sjasnio chitav sistem objekata i pointera (pokazivacha) na iste :)
[ Java Beograd @ 13.02.2006. 11:32 ] @
Pazi, objekat tipa String je posebna vrsta objekata, spada u vrstu "nepromenljivih" objekata. Nemojte da vas to zbuni. Stringovi su prilicno nezgodni za prezentovanje OO osnova objekat -> referenca, kopiranje reference, kopiranje vrednosti i slicno.
[ Java Beograd @ 13.02.2006. 11:40 ] @
Zapravo, glavno je pitanje zasto bi radio ovo:
Code:
String s2 = s1;

? Zasto bi istu referencu cuvao u dve promenljive ?
[ zdravkod @ 15.02.2006. 00:07 ] @
Da, shvatio sam da je String drugaciji od ostalih, i da sve lepo
funkcionise za ostale objekte, sem za String

Zdravko
[ p_sasko @ 16.02.2006. 14:28 ] @
Nisi probao pravi primer:
Probaj ovako:
String a="1"
String b=null;
b=a;
Pa ispisi (b)
String c="2";
b=c;
Pa ispisi (a,b,c) Bice svi isti sto znaci da pointeri rade sve dok ne kazes
promenljivi (= new ... )
Za String je razlika jedino u tome sto nemoras da kazes (.. =new... ) jer se
i bez toga na to odnosi.

Pozdrav...