Ona nemeni pole, ona meni prvky tohto pola.
On 4. 4. 2011 13:33, Libor Jelinek wrote:
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] <mailto:[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