- - PR -
dereference(参照外し) について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-15 10:54
dereference(参照外し)とはどういった状態を指すのでしょうか?
以下のような場合に「参照外しされた」といわれているようですが、 どこからの参照が外されているのでしょうか? また、「外されている」状態とはどんな状態でしょうか? ・参照型の変数が null でないことを前提とした処理(static でない フィールドやメソッドを呼び出す処理)を行った場合 ・参照型の変数が null であるかどうかをチェックした場合 むしろ、「参照されている」ように感じてしまい違和感を持っています。 | ||||||||
|
投稿日時: 2006-05-15 13:52
まず、「参照されている状態」とは、参照型の変数から参照されているインスタンスの状態のことです。 逆に、「参照が外されている状態」とは、参照型の変数から参照されていないインスタンスの状態のことです。もっとも、ひとつのインスタンスは複数の変数から参照されますので、あるインスタンスがひとつの変数から参照が外されているからといって、そのインスタンスが別の変数から参照を外されているとは限りません。
これは、参照型の変数が参照しているインスタンスがあるかどうかを調べているわけです。変数を調べることを「参照」と言えなくもないかもしれませんが、意味が違います。 変数とインスタンスの関係(変数がインスタンスを参照することや、インスタンスは変数から参照されること)を図で描いてみると良いかもしれません。変数とインスタンスの関係が、多対1になることに着目してください。 #以下、あとで追加。 (後でスフレさんのご投稿を見て気づきましたが、)上記はぜんぜん dereference の説明じゃありませんでした。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} [ メッセージ編集済み 編集者: unibon 編集日時 2006-05-15 14:30 ] | ||||||||
|
投稿日時: 2006-05-15 14:08
「参照外し」と訳すことがあるみたいですが、あまり良い訳語だとは思いません。
dereferenceは、「参照する」こと、「指している先にアクセスする」ことを意味します。Javaだとわかりにくいのですが、C/C++では、
この p が reference、
* や -> を付けて指した先を使うことが dereference です。 Javaの場合は、インスタンスを指す変数そのものは reference、その変数からインスタンス本体にアクセスすることが dereference ですね。 | ||||||||
|
投稿日時: 2006-05-18 10:24
ありがとうございます。 ポインタの概念で説明頂いた形には理解しやすかったです。 reference と dereference の概念については理解できたと思います。 Java においては、参照型変数のフィールドやメソッドにアクセスすることが dereference ということになるかと思います。 返信が遅くなりましたが、本当にありがとうございました。 |
1