kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

「Java初心者が犯しやすい10の過ち」の誤り

http://journal.mycom.co.jp/news/2008/06/18/041/index.html

の内容について。

大筋で異論は無いんだけど、

オブジェクトは参照渡し、基本型は実体渡し

は間違い(かなり昔から同じ誤解が再生産されてきた気がする)。基本型は値そのものを、参照型はオブジェクトへの参照を保持しているということ(つまり、単に保持している値の種類の違い)であって、渡し方はどちらも値渡し(call by value)。参照渡し(call by reference)というのは、lvalueと成り得る式を渡したときに、lvalueが渡されるかどうかによって決まるのであって、「参照」(reference)が渡されるから参照渡しなのではない。この辺の話は、JavaHouse Brewers MLのアーカイブに詳しい議論があった気がする。

たぶん、上の記事を書いた人は、おそらく両者の意味的な違いについては正しく分かっていて書いておられるんだろうけど、それでも用語の使い方として間違いなので、指摘しておく。

あと、この(間違った)用語の使い方では、C#などの「真の」参照渡しがあり、かつ、参照型も存在するような言語で混乱すると思う。

追記。これは、マイコミジャーナルの記事の間違いというより、その元記事であるTop Ten Errors Java Programmers Makeの間違いなので、表題は不適切だったかも。