「参照渡し」と「参照の値渡し」

自分が「参照渡し」と「参照の値渡し」を混同していたことについて指摘をいただいて間もなかったので、タイムリーな会話だなあと思って、まとめさせていただくことにしました。 関連 http://d.hatena.ne.jp/tt4cs/20111026/1319561301#c
5
R. TANAKA kouitirou @tkmusic1976

@ikeike443 javaでは参照型であるからといって参照渡しは出来ないという意味です。

2011-12-08 01:32:09
Takafumi Ikeda @ikeike443

@tkmusic1976 それ、そこがあんまりわかってないすね。。

2011-12-08 01:34:10
Takafumi Ikeda @ikeike443

@tkmusic1976 ポインタを渡すことを参照渡しと思ってたけど、どうもC++の文脈でいう参照っていみちがうんですかね。perlのリファレンスみたいなもの??

2011-12-08 01:36:52
R. TANAKA kouitirou @tkmusic1976

@ikeike443 javaでは変数が持つ参照(インスタンスのアドレス)を値渡しします。インスタンスのアドレスが入った変数のアドレスを渡す(参照渡し)とは違います。

2011-12-08 01:39:05
R. TANAKA kouitirou @tkmusic1976

ますます分かりづらい説明になってきた・・・。

2011-12-08 01:40:09
Takafumi Ikeda @ikeike443

@tkmusic1976 あーメンバは書き換えられるけど、引数自体の指すアドレスを書き換えることはできないってことすかね

2011-12-08 01:42:10
R. TANAKA kouitirou @tkmusic1976

Object a = new Object; このとき変数 a にはヒープ上のインスタンスのアドレスが入っている。aのアドレスを渡すのが参照渡し。aの値をスタック上のメソッドの変数にコピーするのが値渡し。javaでは後者しかできない。

2011-12-08 01:44:00
R. TANAKA kouitirou @tkmusic1976

@ikeike443 以上です。ポインタ渡しについては良く分かりません!

2011-12-08 01:48:17
Takafumi Ikeda @ikeike443

@tkmusic1976 このとき、メンバにオブジェクトがいたらそいつは書き換えられた気が

2011-12-08 01:50:02
R. TANAKA kouitirou @tkmusic1976

@ikeike443 aの中のメンバ(aがもつ参照がしるすヒープ上のインスタンスのメンバ)のことですかね?setterがあれば変数が渡されたメソッドから書き換える事は可能です。

2011-12-08 01:55:29
Takafumi Ikeda @ikeike443

再帰の時だけだっけ。もう眠い。。

2011-12-08 01:55:33
Takafumi Ikeda @ikeike443

@tkmusic1976 はい。でしたよね。そう言えばたしかにjavaにはpascalのvarはなかったですね。つまらんことで時間とってさーせん。。

2011-12-08 02:00:14
R. TANAKA kouitirou @tkmusic1976

@ikeike443 参照渡しがしたければ COBOL or DELPHI という結論でいかがでしょうか!?

2011-12-08 02:01:24
Takafumi Ikeda @ikeike443

@tkmusic1976 参照渡しをしたいというシチュエーションはないので大丈夫です! そういうシチュエーションにならないようにしたい!

2011-12-08 02:03:39
Takafumi Ikeda @ikeike443

@cocoatomo Javaのは参照の値渡しと言うべきらしい

2011-12-08 02:10:31
R. TANAKA kouitirou @tkmusic1976

delphi の関数ポインタは初めて知ったときは面白かったな。

2011-12-08 02:10:40
tomo🐧@learning @cocoatomo

@ikeike443 あぁ, そうか. 確かに. もう忘れちゃいましたけど, Delphi の var って C++ の参照渡しと同じでしたっけ?

2011-12-08 02:12:14
R. TANAKA kouitirou @tkmusic1976

@ikeike443 COBOLについて考える必要はありません。感じて下さい。COBOLはみんなの日々の暮らしを影でそっと支えてます。

2011-12-08 02:16:40
R. TANAKA kouitirou @tkmusic1976

@ikeike443 Cとかアセンブラのサブルーチンを呼び出すのに使ってた記憶が・・・。

2011-12-08 02:17:46