人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javaについて教えて下さい。

問題と解説は、こちらにあります。
http://www.geocities.jp/hyden0000/h.html

わからない個所は、解説の図解で、オブジェクトが互いに参照している
ところです。解説には、9、10行目の互いに参照しあっていると記述がありますが、
sm1.objは、sm2のポインタを代入しているのであって、
sm2.objと互いに参照しないように思います。

最終的に12行目を実行後に、sm1とsm2がobjを参照しなくなるため、
GCが実行されることはわかるのですが・・。いまいち、図解が
しっくりきません。すみませんが、どなたかアドバイスお願いします。

1278429062
●拡大する

●質問者: masa193
●カテゴリ:コンピュータ インターネット
✍キーワード:GC Java いまいち すみません アドバイス
○ 状態 :終了
└ 回答数 : 3/4件

▽最新の回答へ

1 ● ko8820
●50ポイント ベストアンサー

Javaにはポインターという概念がないんです。

だからポインターという概念で考えたら駄目です。

参照といってるように、参照という概念で考えないと理解できません。

図は正しいです。

-------------

ポインターっぽく考えると

Sample sm1 =new Sample(); //仮にsm01のアドレスが001

Sample sm2 =new Sample(); //仮にsm02のアドレスが002

sm1.obj=sm2; //sm1.objはアドレス002を参照

sm2.obj=sm1; //sm2.objはアドレス001を参照

------

sm1 =null ; //sm1のメモリー領域を開放しようとする

ここで、sm2.objがアドレス001を参照してるので、sm1の領域を開放しようとしても

出来ない。

http://q.hatena.ne.jp/answer

◎質問者からの返答

ありがとうございます。なぜが、図解のobjをsm1やsm2のオブジェクトだと

理解できていなかったみたいです。

sm1.obj=sm2;では、sm1のオブジェクトがsm2のオブジェクトを参照しているため、

あの図解が成り立つのですね。


2 ● koriki-WeKan
●0ポイント

どのようにしっくり来ないのか説明していただかないと

回答のしようがない

http://msugai.fc2web.com/java/perform/garbage.html

◎質問者からの返答

だから、図はのしているでしょ。


3 ● kazuyasakai
●30ポイント

smp1とsmp2はObjを参照する変数ですから、

smp1.obj = smp2;

を実行したときに、smp1.objはsmp2の実態であるObjを参照するからです。

http://q.hatena.ne.jp/

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ