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