class A{
A aob;
public static void main(String args[]){
A a=new A();
A b=new A();
A c=new A();
a.aob=b;
b.aob=a;
c.aob=a.aob;
A d=new A().aob=new A(); //tricky assignement
c=b; //one object eligible GC
c.aob=null;
System.gc();
}
}
ガベージ コレクションの対象となるオブジェクトは 2 つありますが、1 つはわかりにくいものです。
A d=new A().aob=new A();
1)この行は、これを作るだろうということ
A d = new A().aob = new A();
^ ^
O1 O2
O1 --> O2 --> null
^
|
d ----|
2)しかし、実際に行っているのはこれ (1 つの適格なオブジェクト)です。
A d = new A().aob = new A();
^ ^
O1 O2
O1 --> O2 --> null
^
|
d -----------|
代入は右から左に連想されるためです。
A d = ( new A().aob = new A() );
そうでなければ、誰かがそれを説明できますか?ありがとう