Zdravím,
jiná ukázka předávání hodnotou a odkazem ...
např. primitivní typ se vždy předává hodnotou
public static int zmenInt(int i) {
++i;
return i;
}
int i = 1;
zmenInt(i);
System.out.println("i == " + i); // 1
ale objekty se předávájí odkazem (resp. adresa pointeru ...)
public static Date zmenDate(Date d) {
d.setTime(0L);
return d;
}
Date date = new Date();
System.out.println("date == " + date); // v case mojeho spusteni
... date == Mon Apr 04 14:15:27 CEST 2011
zmenDate(date);
System.out.println("date == " + date); // date == Thu Jan 01
01:00:00 CET 1970
S pozdravem
Fafi
2011/4/4 Robert Novotny <[email protected]>:
> Presne.
>
> A) Mozete sa na to divat ako Cckar
> Vsetko sa odovzdava hodnotou:
> a) ak su to primitivne typy, tak je to zrejme
> b) ak su to objektove typy, tak hodnotou odovzda adresa (pointer na objekt),
> lenze s adresou nemozete robit pointerovu aritmetiku. Presmerovanie pointra
> v metode nema ziaden dopad na samotny parameter, kedze ten sa do skutocneho
> parametra nakopiroval hodnotou
> c) pole je prakticky objektovy typ
>
> B) Mozete sa na to divat ako Java
> a) primitivne typy idu hodnotou
> b) objektove typy idu referenciou, co prakticky znamena, ze pre ucely
> manipulacie sa stotoznuje pointer na objekt so samotnym objektom. Ak mate
> objekt v parametri metody, zmeny jeho atributov/vlastnosti su vidiet aj z
> volajucej metody, ale ak do parametra v ramci metody priradite referenciu na
> iny objekt, tato zmena sa mimo metody neprejavi.
>
> public static void handleBuffer(byte[] data) {
> data = new byte[] {3, 1, 5};
>
> }
>
> public static void main(String[] args) {
> byte[] buffer = new byte[] {2, 4, 5};
> handleBuffer(buffer);
>
> System.out.println(Arrays.toString((buffer)));
> // vypis 2, 4, 5
> }
>
> On 4. 4. 2011 13:48, Libor Jelinek wrote:
>
> Takže dělá prostě něco jako toto:
>
> static void zmenPoleBajtu(byte[] b) {
> b[0] = 'd';
> b[1] = 'e';
> b[2] = 'f';
> }
>
> Díky! Už jsem doma! Proč jste to neřekl hned? :-) Ono je to s těmi
> referencemi poměrně složité. Alespoň pro mojí hlavu :-) A jak tu někdo říkal
> tak asi hodně programátorů prostě jen používá a nepřemýšlí co se přesně
> děje. A čím víc umí Springů, J2EE a všeho podobného tím víc je možná
> zarážející, že ty úplné nej low-level základy pokulhávají. Jako vysocí
> matematici nemějí pak spočítat, kolik jim májí vrátit v krámě :-)
>
> Děkuji pane Novotný za vysvětlení!
> Libor