参照代入について

Java73閲覧

ベストアンサー

この回答はいかがでしたか? リアクションしてみよう

ThanksImg質問者からのお礼コメント

一番呑み込めました。 他の、皆様も貴重なご説明ありがとうございました。

お礼日時:11/13 9:58

その他の回答(5件)

a = new C(); ① b = a; ② a = new C();③ ②ではa=b、③でa<>bになるけど、bのインスタンスはそのままです。 まぁCの作り方次第ではbのインスタンスのメンバへ何らかの影響を与えることは可能じゃないかとは思うけど。 > 参照代入の後で これって上記の②のことを言ってる?

そうてす。 さらに上の場合で言うなら、③の後aの中の変数を変化させてもbの中の変数は変わらないようにするためです。つまり双方の参照アドレスを別にしたいのです。 参照代入が済めば、もうその時点でのaの中の変数の状態に用はなく、aの中の変数の状態を変えて、またそれをaあるいは他のCクラスから作成したインスタンスに参照代入させるという繰り返しの役割があるからです。

>同じようにbも初期化されてしまっているのでしょうか? bは初期化されません。aのアドレスがnewで出来たインスタンスのアドレスに変更されるだけです。

>もしa=new C()のようにコンストラクタを呼び出して初期化しても、 まず、この認識が間違い。 newが付いている時点で新しくインスタンスを作っている。 なのでbに影響を与える事は無い。

インスタンスと参照の意味がぐちゃぐちゃになってると思うよ。