[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] ポインタと参照



前橋です。

別のMLで散々書いてるネタですみません。(_o_)

水野さん:
>”私はある人にJavaにポインターはありません。
>しかし、newで返ってくる値はいったい何でしょう?”と言われました。

遠藤さん:
>それは「参照」です。でも C++ の参照とは違います。決してポイ
>ンターではありません。

・Cには、「ポインタ」が存在する。「参照」はない。

・C++には、「参照」と「ポインタ」が存在する。それは別のものである。

・Javaには、C/C++における「ポインタ」が存在するが、それを
  「参照」と呼んでいる。

と私は認識してますが...

私は、「参照」という言葉の厳密な定義を知らないので、その辺は
ぜひ詳しい方の教えを請いたいです。が、フツーのCプログラマか
ら見れば、Javaの「参照」って、まぎれもなくポインタに見えます。

少なくとも、

「Javaにはポインタがないから簡単だ」

と言われると、私は拒否反応を示してしまいます。

CのポインタとJavaのポインタとの違いというと、

(1)Javaは、プリミティブのポインタをとることができない。
(2)Javaは、オブジェクトと配列については、ポインタしかない。
(3)Javaには、ポインタ演算はない。
(4)Javaには、Cにおける「ポインタと配列の間の微妙な関係」はない。

Cで「ポインタが難しい」とよく言われるのは、実は原因は(4)であ
ると思うので、その点において Java が Cより簡単なのは否定しま
せんけれども。

(1)と(2)って、どうもGCの実装を簡単にするためにこうしたように
しか見えないのですが... 実際の所どうなんでしょう?

オブジェクトの実体をスタック上に取れるようにすると、そこでコ
ンストラクタを呼ばなければならないので、処理系が複雑になると
いうのもありそうですが。

>それが証拠に、有名な swap() 関数問題があります。
>
>【問題】
>Java で swap() 関数を書いてください。
...
># 問題出してる本人も答えは分からん (*_*)

私にも分からんです。

C に慣れた私としては、C++の参照型は、どうも好かんです。コー
ディングをだーっと読んでって、いつ変数の値がぶち壊される可能
性があるのかをつかみにくいと思います。

演算子のオーバーロードも好かんです。

templateは欲しいですが。

------------------------------------------------------------
  前橋 和弥                             maebashi@xxxxxxxxxx
  中部ソフトエンジニアリング(株)
    〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
    Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------