Děkuji pane Thone,
to tedy znamená, že znovu nechápu jak může read(byte[] b) z např.
FileInputStream měnít hodnotu parametru, když je mu předána nikoli
reference, ale nový objekt se stejnou hodnotou jako měl (má) mnou
předávaný... Viz můj předchozí nebo váš úryvek kódu.

Libor

2011/4/4 Ladislav Thon <[email protected]>

>  nikoliv, naopak, vše je předáváno referencí.
>>
>
> Ne, původní pisatel to má správně, vše se předává hodnotou -- primitivní i
> referenční typy. Tohle je pekelně rozšířený omyl.
>
> Předávání parametrů odkazem (referencí) by znamenalo, že můžete tu původní
> proměnnou "vyměnit", asi takhle:
>
> void caller() {
>   String a = "a";
>   callee(a);
>   // !!! co je v proměnné a?
> }
>
> void callee(String param) {
>   String b = "b";
>   param = b;
> }
>
> Kdyby se parametr param v metodě callee předával referencí, pak by na konci
> metody caller platilo "b".equals(a). Pokud se dobře pamatuju, v C# by to
> takhle fungovalo, kdyby ten parametr byl deklarovaný "ref String param".
>
> Jenže referenční typy se v Javě předávají hodnotou -- dostanete kopii
> reference, takže můžete změnit _stav_ objektu (v ukázce ne, String je
> neměnitelný), ale nemůžete _vyměnit_ ten objekt jako takový.
>
> Pro pole platí totéž, jsou to taky referenční typy (dalo by se říct, že to
> jsou vlastně taky objekty, a nebyla by to úplná lež).
>
> LT
>

Odpovedet emailem