• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:インスタンス変数について)

インスタンス変数についての質問

このQ&Aのポイント
  • JAVA勉強中のものです。インスタンス変数についてわからないのですが、class Data{int d;} classSample{ public static void main(String[] args){ Data data1 =new Data(); Data data2 =new Data(); data1.d = 100; data2 = data1; data2.d = 200; System.out.println(data1.d); } } 実行すると200が表示されますが、new演算子によってできたオブジェクトの実体を参照する ID がdata1およびdata2に入るのは理解できるのですが、インスタンス変数のdはメモリ上でどう設定されているかイメージがわきません。わかる方どうぞ教えて下さい。
  • JAVA勉強中の方からの質問です。インスタンス変数についてわかりません。具体的なコードとして、class Data{int d;} classSample{ public static void main(String[] args){ Data data1 =new Data(); Data data2 =new Data(); data1.d = 100; data2 = data1; data2.d = 200; System.out.println(data1.d); } } このコードを実行すると、data1.dに100を代入し、data2をdata1に代入してからdata2.dに200を代入し、最後にdata1.dを表示すると200が表示されます。インスタンス変数のdはどのように設定されているのでしょうか?詳しい方教えてください。
  • JAVAのインスタンス変数について質問です。コードには、class Data{int d;} classSample{ public static void main(String[] args){ Data data1 =new Data(); Data data2 =new Data(); data1.d = 100; data2 = data1; data2.d = 200; System.out.println(data1.d); } }とあります。このコードを実行すると、data1.dに100を代入し、data2をdata1に代入してからdata2.dに200を代入し、最後にdata1.dを表示すると200が表示されます。インスタンス変数のdはどのようにメモリ上で設定されているのでしょうか?詳しい方に教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.1

「new演算子によってできたオブジェクトの実体」にint dのメモリ領域が確保されています。 Data data1 =new Data(); Data data2 =new Data(); new Data();とする度に、オブジェクトの実体(インスタンス)はできるので、 「data1が参照しているインスタンス」と「data2が参照しているインスタンス」は(この段階では)別物です。 それぞれにint dのメモリ領域があります。 data1.d = 100;で、「data1が参照しているインスタンス」のint dのメモリ領域に値100がセットされます。 次にdata2 = data1;としているので、data2は「data1が参照しているインスタンス」を参照することになります。 つまり、data1とdata2は、同じインスタンスを参照するようになったわけです。 ※この時点で、「最初にdata2が参照していたインスタンス」は、どこからも参照されなくなっています。 なので、data2.d = 200;とした場合、 「data2が参照しているインスタンス」=「data1が参照しているインスタンス」 のint dに値200をセットした、とも言えるわけですね。 http://www.atmarkit.co.jp/fjava/rensai2/javaent02/javaent02.html http://www.atmarkit.co.jp/fjava/rensai2/javaent03/javaent03.html

tomojyuu
質問者

お礼

回答ありがとうございます。 よくわかりました。

関連するQ&A