- PR -

dereference(参照外し) について

1
投稿者投稿内容
hanny
会議室デビュー日: 2003/07/31
投稿数: 13
投稿日時: 2006-05-15 10:54
dereference(参照外し)とはどういった状態を指すのでしょうか?

以下のような場合に「参照外しされた」といわれているようですが、
どこからの参照が外されているのでしょうか?
また、「外されている」状態とはどんな状態でしょうか?

・参照型の変数が null でないことを前提とした処理(static でない フィールドやメソッドを呼び出す処理)を行った場合
・参照型の変数が null であるかどうかをチェックした場合

むしろ、「参照されている」ように感じてしまい違和感を持っています。

unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-05-15 13:52
引用:

hannyさんの書き込み (2006-05-15 10:54) より:
dereference(参照外し)とはどういった状態を指すのでしょうか?


まず、「参照されている状態」とは、参照型の変数から参照されているインスタンスの状態のことです。
逆に、「参照が外されている状態」とは、参照型の変数から参照されていないインスタンスの状態のことです。もっとも、ひとつのインスタンスは複数の変数から参照されますので、あるインスタンスがひとつの変数から参照が外されているからといって、そのインスタンスが別の変数から参照を外されているとは限りません。

引用:

hannyさんの書き込み (2006-05-15 10:54) より:
・参照型の変数が null でないことを前提とした処理(static でない フィールドやメソッドを呼び出す処理)を行った場合


これは、参照型の変数が参照しているインスタンスがあるかどうかを調べているわけです。変数を調べることを「参照」と言えなくもないかもしれませんが、意味が違います。

変数とインスタンスの関係(変数がインスタンスを参照することや、インスタンスは変数から参照されること)を図で描いてみると良いかもしれません。変数とインスタンスの関係が、多対1になることに着目してください。

#以下、あとで追加。

(後でスフレさんのご投稿を見て気づきましたが、)上記はぜんぜん dereference の説明じゃありませんでした。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}

[ メッセージ編集済み 編集者: unibon 編集日時 2006-05-15 14:30 ]
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-05-15 14:08
「参照外し」と訳すことがあるみたいですが、あまり良い訳語だとは思いません。

dereferenceは、「参照する」こと、「指している先にアクセスする」ことを意味します。Javaだとわかりにくいのですが、C/C++では、
コード:
p = &instance;


この p が reference、
コード:
*p


* や -> を付けて指した先を使うことが dereference です。

Javaの場合は、インスタンスを指す変数そのものは reference、その変数からインスタンス本体にアクセスすることが dereference ですね。
hanny
会議室デビュー日: 2003/07/31
投稿数: 13
投稿日時: 2006-05-18 10:24

ありがとうございます。

ポインタの概念で説明頂いた形には理解しやすかったです。
reference と dereference の概念については理解できたと思います。

Java においては、参照型変数のフィールドやメソッドにアクセスすることが dereference ということになるかと思います。

返信が遅くなりましたが、本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)