ホーム   »  スポンサー広告  »     »  Java  »  値渡し/参照渡し

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

値渡し/参照渡し

関数やメソッドに引数を渡す方法の呼び名。基本的には:

値渡し
呼び出し側の持ってる値がコピーされて渡される。呼び出し先でこの値を変更してもコピーなので呼び出し側には影響が無い。
参照渡し
呼び出し側の持っている値のメモリブロックそのものが渡される。呼び出し先での変更が呼び出し側にも反映される。

Java でのプリミティブ型は言うまでもなく値渡しだ。スタックに値がコピーされてから呼び出し先の処理が行われる。一方で、オブジェクトのインスタンスを渡した場合、呼び出し先で行ったインスタンスの変更が呼び出し元にも反映される。しかしこれを参照渡しと呼ぶとちょっといやらしいワナにはまる。

Java や C/C++ で参照/ポインタを渡す場合、厳密には参照の値がスタックにコピーされるだけだ。だからこれは厳密には値渡しであり、「参照の値渡し」 と呼ばれている。何だか言葉遊びのようだが、つまりはこれが Java に参照渡しがないと言われる理由だ。

「参照渡し」と「参照の値渡し」の機能面での目的はほとんど同じだ。「参照渡し」でも内部では暗黙的に「参照の値渡し」が行われているに過ぎないから、言語上のシンタックスシュガーの違いでしかないとも言える。目的が同じなのに本質でない違いで呼び名が変わるのだ。

どういった経緯で Java にたどり着いたかは人それぞれだ。私は元から用語のちょっとした使い間違い程度なら、相手の背景を尊重してその意図が汲み取れればどうでも良いと思っている。だがまぁ世の中にはそう思ってくれない方々も多少はいらっしゃるのも事実 (某コミュニティではこのネタで何度も燃え上がっているし)。だから Java で参照渡しという言葉は使わないようにちょっと注意しときましょ。

コメント
トラックバック
トラックバック URL
コメントの投稿
管理者にだけ表示を許可する
Profile
Takami Torao
Takami Torao
C/C++ 使いだった 1996年、運命の Java と出会い現在に至る。のらアーキテクト。
Yah, this is image so I don't wanna eat spam, sorry!
Search

Google
MOYO Laboratory
Web

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。