Nisam se mnogo udubljivao u razlike onoga shto tvrdite, pa mi se chini da ste u sushtini svi u pravu ali se jednostavno ne razumete.
Pravila su prilichno jednostavna, ali se mnogo ljudi zbunjuje i previshe komplikuje stvari:
1. U Java jeziku, prenos promenljive izmedju funkcija je CALL BY VALUE (tj. po vrednosti). Shta ovo konkretno znachi? To konkretno znachi da, shta god poslali nekoj funkciji kao argument, funkcija ce za svoj argument primiti KOPIJU VREDNOSTI ORIGINALNOG ARGUMENTA.
2. Postoje dva tipa promenljivih: primitive i reference. Primitive su char, byte, short, int, long, float, double, boolean. Reference su promenljive koje pokazuju na nizove ili objekte. Inache, Java language specification ne pravi veliku razliku izmedju termina "pointer" i "reference", jer u Java jeziku nije lako napraviti ochiglednu razliku izmedju ta dva pojma kao shto je to moguce u C++ (C nema reference).
Poshto se svi tipovi prenose po vrednosti, znachi da se i reference prenose po vrednosti. Shto ce reci, menjanje
reference unutar funkcije (ne menjanje objekta na koji ona pokazuje) nema nikakvog uticaja na referencu koju smo poslali funkciji kao argument.
Mozhda je najvazhnije objasniti shta u stvari znachi linija
Code:
Object a = new Object();
Code:
Object a
predstavlja referencu na objekte tipa Object. Takva promenljiva mozhe biti neicijalizovana, mozhe sadrzhati vrednost null, i mozhe sadrzhati referencu ka nekom objektu. "Referenca ka objektu" je u stvari adresa konkretnog objekta u Java memorijskom prostoru. Dakle, linija
Code:
Object a = new Object();
je u stvari uradila dve stvari:
1. Kreirala referencu ka objektima tipa Object (i za to zauzela 32 bita memorije na 32-bitnim sistemima)
2. Kreirala objekat tipa Object (i za to zauzela memorijskog prostora koliko je potrebno da se smesti objekat tipa Object), i njegovu adresu iskopirala u referencu iz tacke 1.
Znachi iako sa inicijalizovanom referencom nema druge aritmetike osim "dodeli adresu nekog drugog objekta" ili "dodeli vrednost null", referenca je i dalje zasebna promenljiva chija se vrednost (a njena vrednost je adresa objekta na koji pokazuje) prenosi BY VALUE drugim funkcijama.