読者です 読者をやめる 読者になる 読者になる

Fight the Future

何かを始めたら、半分成功したのと同じ

Javaは参照渡しじゃないって頭ではわかってるけど

pg

特に説明するような内容ではないんだけど。
Javaではメソッドの引数は参照渡しじゃなくすべて値渡し。

   
    void fuga(int a) {
        a = 1;
    }

    void hoge() {
        int b = 0;
        fuga(b);
        System.out.println(b);
    }
    // hogeを呼び出してもbは0のまま  

つまり引数には値のコピーを渡す。
プログラムを始めた人はよく間違ってしまうよね。

でもプリミティブじゃなくて参照型でこういうサンプルを作ると、
よく参照渡しと勘違いされてしまう。
参考書とかでもJavaは参照渡しと間違っているのもあるらしい。

class Human {
    String name;

    public void setName(String name) {
        this.name = name;
    }
}

    void fuga(Human h) {
        h.setName("jyukutyo");
    }

    void hoge() {
        Human h = new Human();
        huga(h);
        System.out.println(h.name);
    }
    // hogeを呼び出すとnameは"jykutyo"になる

nameが変わったから参照渡し、ではなくて、あくまで参照を値で渡してる。
って頭ではわかってるんだけど、参照を値で渡すってどういうことかいまいちピンとこないなあ。

アドレスを直接渡してるのではなくて、アドレスへの参照を元の参照からコピーして作成して、
それを渡してるってことが参照を値で渡すってこと??