Java での次のコード スニペットを検討してください。
Customer obj1 = new Customer();
Customer obj2 = new Customer();
Customer obj3 = obj2;
obj3 = obj1;
ここでいくつの参照変数とオブジェクトが作成されますか? 私が遭遇した解決策はすべて混乱していました。説明してください。
後
Obj3= Obj1;
2 つのオブジェクトと 3 つの参照があります。Obj1 と Obj3 は同じオブジェクトを参照します。
Customer Obj1= new Customer();
// Customer オブジェクトがヒープ上に作成され、obj1 がそれを参照します
Customer Obj2= new Customer();
//Customer オブジェクトがヒープ上に作成され、obj2 がそれを参照します
Customer Obj3= Obj2;
// obj3 は、obj2 によって作成された顧客オブジェクトを参照します
Obj3= Obj1;
// obj3 (以前は obj2 によって作成された cust obj を参照していましたが失われます)、現在は obj1 によって作成された cust obj を参照します
したがって、2 つのオブジェクトと 3 つの ref 変数と言えます。
JLSはそれを禁止していませんが、私の知る限り、JVMは参照カウントを使用していませんが、信頼性が低すぎます。注: C++ スマート ポインターは参照カウントを使用しますが、これらは非常に非効率的です。
2 つの異なるオブジェクトへの参照は最大 3 つまでです。
注: あなたのコードが何か有用な処理を行わない限り、JVM はこのコードを何もない状態に最適化できます。その場合、参照やオブジェクトはありません。
繰り返しステップスルー...
Customer Obj1= new Customer();
Obj1 によって参照される、作成された 1 つの新しいオブジェクト
Customer Obj2= new Customer();
Obj2 によって参照される、作成された 2 番目のオブジェクト
Customer Obj3= custObj2;
参照変数である Obj3 が参照するcustObj2
(このデータ セットには存在しないものは、以前に作成されたと想定しますか?)
Obj3= Obj1;
Obj3 は、Obj1 を指すように再割り当てされます。
最終的に、Obj1、Obj2、および Obj3 の 3 つの参照と 2 つのオブジェクト (最初の 2 つのステートメント) があり、最後にあいまいcustObj2
です ... Obj2 と入力するつもりなら、その部分を無視してください :)
custObj2
が で初期化されていると仮定するとnew
、上記のスニペットから、その 3 つのオブジェクト ( を含むcustObj2
) と 4 つの参照 ( を含むObj3
)
3 つの変数と 2 つのオブジェクトが作成されます。
2 つのオブジェクトが作成されます (最初の 2 行)。
3 つの参照変数が作成されます (Obj1、Obj2、および Obj3 はすべて参照変数です)。
最後の 2 行は、2 つの異なるオブジェクトへの参照を Obj3 に割り当てるだけです。