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


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

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

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

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/07/07 00:11:05
  • 終了:2010/07/08 11:16:03

ベストアンサー

id:ko8820 No.1

ko8820回答回数1221ベストアンサー獲得回数692010/07/07 00:29:31

ポイント50pt

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

id:masa193

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

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

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

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

2010/07/07 14:21:47

その他の回答(3件)

id:ko8820 No.1

ko8820回答回数1221ベストアンサー獲得回数692010/07/07 00:29:31ここでベストアンサー

ポイント50pt

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

id:masa193

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

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

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

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

2010/07/07 14:21:47
id:koriki-WeKan No.2

koriki-WeKan回答回数342ベストアンサー獲得回数202010/07/07 07:07:16

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

回答のしようがない

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

id:masa193

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

2010/07/07 12:09:47
id:kazuyasakai No.3

kazuyasakai回答回数65ベストアンサー獲得回数12010/07/07 10:04:45

ポイント30pt

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

smp1.obj = smp2;

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

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

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 dolduke 9 8 1 2010-07-07 13:15:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません