Parameter passing i Java

Tags:    java

Hej folkens, sidder og undrer mig over et lille problem mht parameter passing i Java. Har kunnet læse mig frem til det er pass by value i java, og når det kommer til objekter er det referencen til et objekt der sendes med som value.

Følgende undrer mig dog på basis af ovenstående definition:

Har man følgende klassestump:
Fold kodeboks ind/udJava kode 


Og kører følgende stykke kode et andet sted:
Fold kodeboks ind/udJava kode 


Man har altså et TestObject der indeholder et SecondObject som igen indeholder et TestObjekt, altså en meget stærk binding (som man bør undgå).

Som jeg forstår det ville man sende referencen til det uinitialiserede objekt med til SecondObjekt der så ville gemme denne reference. Når TestObject så er skabt vil SecondObject indeholde en reference til TestObject. Men det gør den ikke, gemtTest indeholder NULL.

Jeg er kommet frem til det måske kan skyldes at TestObject test; er sat til NULL pr default og først får en egentlig reference addresse når objektet skabes og kan derfor ikke sendes med som parameter før efter det er skabt. Er dette korrekt og i så fald er der nogen der kan give en grund til dette implementations valg i Java?

Man kan løse det ved at splitte koden op i 3 linier med en setmetode i Secondobject, som:
Fold kodeboks ind/udJava kode 




Indlæg senest redigeret d. 24.11.2008 13:09 af Bruger #6389
Sådan fungerer det ikke. Java referencer svarer mere til C's pointere (derefererer du et uinitialiseret objekt får du da også en NullPointerException).

Giver du null med som parameter, bliver den ikke på magisk vis ændret senere.

Det ville blive umuligt at styre sine referencer, hvis det var implementeret anderledes:

Fold kodeboks ind/udKode 


Hvis referencerne altid pegede på det samme som fra 'str', så ville alle entries i min liste være null.



Indlæg senest redigeret d. 24.11.2008 13:57 af Bruger #2695
Ah ja det er rigtigt, så var jeg lidt på den rigtige kurs. Mange tak Robert.



t