- ベストアンサー
※ 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はどのようにメモリ上で設定されているのでしょうか?詳しい方に教えていただきたいです。
- みんなの回答 (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
お礼
回答ありがとうございます。 よくわかりました。