• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ArrayList の変数をaddしてもアドレスが変化しない)

ArrayListの変数をaddしてもアドレスが変化しない

このQ&Aのポイント
  • windowsXP Eclipse3.4でArrayListの変数をaddしてもアドレスが変化しない現象が発生しています。
  • 具体的には、BeanクラスのインスタンスをArrayListに2回追加した場合、アドレスが全て同じになってしまう状況です。
  • 原因が分からず困っているので、解決策を教えていただけると助かります。

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

  • ベストアンサー
noname#94983
noname#94983
回答No.1

>beanのアドレスとlist内の二つのアドレスと3つのアドレスが >すべて同じになってしまいます。 すべて同じオブジェクトを参照しているのだから当たり前。「参照」について理解できていないように思える。変数beanと、list内の2つのbeanは、「まったく同じ値」だということはわかるだろうか? Bean bean = new Bean(); これは、Beanのインスタンスを作成し、その「参照(それがおかれている場所を示す値。まぁ、アドレスと考えてもいい)」を変数beanに設定する、という意味になる。list.add(bean);は、このbeanの値(オブジェクトではなく、その在り処を示す参照の値)がaddされている。つまり、変数beanもlist内にaddしたものも、すべて「どこかにあるBeanオブジェクトのある場所を示す値」が収められているわけで、すべて同じ値になるのは当たり前。 オブジェクトは、変数に代入したりコレクションにaddしたりしても、そのコピーが代入されるわけではなく、そのオブジェクトがある「場所の値」が渡されている、ということをよく理解しておくと、これらの疑問は解消されると思う。

qqtaka
質問者

お礼

アドバイスありがとうございます。 今回の処理の場合は、 ArrayList list = new ArrayList(); Bean bean = new Bean(); list.add(bean); bean = new Bean(); list.add(bean); System.out.println(bean); System.out.println(list); と新しくオブジェクトを作成して、addするべきだということが分かりました。 質問では、同じbeanをaddしていたのだけなので、 同じアドレスが 格納していただけなのですね。。 ありがとうございました。