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 >
