K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>>確かにJavaにはポインタがあると考えたほうが理解はしやすいでしょうが、 >>やはり「厳密に言えば」無いと思います。 >> >>まぁ理由はリンクしているページに書いてあるとおりなのですが。 >>思います、なんて書いてるのは自身がJava仮想マシン仕様書を読んだことが無いからで・・・ > >ネットジーンの村山さんの文章ですね。 > >| Java言語にもJavaVMにも,C言語でいうようなポインタ(pointer) という >| 概念は全く存在しない.あるのは参照(reference)であり,参照と >| ポインタは異なる概念になる. >(中略) >| (C言語におけるポインタは単なる「アドレス値を保持する変数」に過ぎない. >| Cにおいては配列や文字列さえもポインタ演算で表現されている.これに対して >| 参照というのはもっと抽象的な概念で,保持するのがアドレス値であるとは限らない. >| 概念が異なるため,例えば「参照どうしの大小関係」や「参照と数値型との相互変換」 >| などは,そもそも「定義」することができない. > >Javaに「アドレス値」としてのポインタは存在しません。そんなことは当たり前で、 >そういう意味での「ポインタ」がJavaにあるなどとは誰も主張していないでしょう。 >少なくとも私は見たことがありません。村山さんの脳内にはいるのかもしれませんが。 > >ていうかそもそもCにおいても、ポインタ同士の大小章比較が保証されているのはひとつの >配列内だけだし、ポインタと数値型との相互変換はできますが、それで何が起きるかは >処理系定義なんですが、そういうことをわかって書いてるのかな。 > >| JavaVMの実装でC言語,及びそのポインタが使われることが多いのは事実だが, >(中略) >| それは実装依存の話でしかない. > >実際、初期の実装では、コンパクションを容易にするために生アドレスではなく >オブジェクトハンドルを使っていました。「Java謎+落とし穴」ではそういうことも >書いているわけで(p.131)、私からすれば「だから何?」でしかないです。 > >| ポインタを「指し示すもの」という一般用語として解釈することも不可能 >| ではないが,かなり言い訳じみている. > >なぜこれが「言い訳じみている」のか、一言も説明してませんね。 >PascalやModula2の立場はどうなるのか、とこれも「Java謎+落とし穴~」には >書きました(p.83)。 > >ところで、村山さんが根拠にしているはずの、JVMの仕様書には以下の記述があります。 > >http://java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#29375 >| There are three kinds of reference types: the class types (§2.8), the >| interface types (§2.13), and the array types (§2.15). An object is a >| dynamically created class instance or an array. The reference values >| (often just references) are pointers to these objects and a special null >| reference, which refers to no object. > >参照値はポインタだって書いてあるじゃん。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!