2

Java での次のコード スニペットを検討してください。

Customer obj1 = new  Customer();  
Customer obj2 = new Customer();  
Customer obj3 = obj2;  
obj3 = obj1;   

ここでいくつの参照変数とオブジェクトが作成されますか? 私が遭遇した解決策はすべて混乱していました。説明してください。

4

7 に答える 7

3

Obj3= Obj1;

2 つのオブジェクトと 3 つの参照があります。Obj1 と Obj3 は同じオブジェクトを参照します。

于 2013-01-24T18:21:48.160 に答える
2
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 変数と言えます。

  • obj1 によって作成されたオブジェクトを参照する obj1 および obj3
  • obj2 は、obj2 自体によって作成されたオブジェクトを参照します
于 2013-01-24T18:22:43.780 に答える
1

JLSはそれを禁止していませんが、私の知る限り、JVMは参照カウントを使用していませんが、信頼性が低すぎます。注: C++ スマート ポインターは参照カウントを使用しますが、これらは非常に非効率的です。

2 つの異なるオブジェクトへの参照は最大 3 つまでです。

注: あなたのコードが何か有用な処理を行わない限り、JVM はこのコードを何もない状態に最適化できます。その場合、参照やオブジェクトはありません。

于 2013-01-24T18:21:28.457 に答える
0

繰り返しステップスルー...

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 と入力するつもりなら、その部分を無視してください :)

于 2013-01-24T18:23:13.943 に答える
0

custObj2が で初期化されていると仮定するとnew、上記のスニペットから、その 3 つのオブジェクト ( を含むcustObj2) と 4 つの参照 ( を含むObj3)

于 2013-01-24T18:21:12.150 に答える
0

3 つの変数と 2 つのオブジェクトが作成されます。

于 2013-01-24T18:21:25.947 に答える
0

2 つのオブジェクトが作成されます (最初の 2 行)。

3 つの参照変数が作成されます (Obj1、Obj2、および Obj3 はすべて参照変数です)。

最後の 2 行は、2 つの異なるオブジェクトへの参照を Obj3 に割り当てるだけです。

于 2013-01-24T18:21:30.953 に答える