Java の参照と C++ の参照の違い - Life like a clown
懐かしい。昔、全く同じことで悩んでいたことがある。
大学の研究室でCにとっぷり浸かり、バイトでJavaを使っていた頃、javaのとあるmethodに渡したStringオブジェクトがmethodの外側に出てきたときに変化しないことに対して非常に混乱したことがある。(参照渡しなんだからmethod抜けても変化してるだろ!?的な勘違い)
Cを学んでいた当時は値渡しか参照渡しの2パターンで考えていたけど、その2つの間に参照の値渡し(Cで言うとポインタ渡しか)があるんだよな。参照の値渡しだと、結局コピーなので、methodの内側でいくら仮引数に対して変更を加えたとても、外側の、実引数の参照先は変わらない。HashMapオブジェクトのように状態を持つオブジェクトなら参照先の内容はmethod内で変化しているかもしれないけどね。
値渡し、参照渡しは色んな本で見かけるが、これに加えて参照の値渡しの説明もしている本にまだ出会ったことがない。こーゆうのってみんな経験で学んでいくものなのかな?