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



Odpovedet emailem