>
> 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