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();
}
}
有两个对象可以进行垃圾回收,但其中一个很难理解。
A d=new A().aob=new A();
1) 我认为这一行会使得它更好
A d = new A().aob = new A();
^ ^
O1 O2
O1 --> O2 --> null
^
|
d ----|
2)但实际上它正在做的是这样的(所以一个合格的对象)为什么会是这样呢?
A d = new A().aob = new A();
^ ^
O1 O2
O1 --> O2 --> null
^
|
d -----------|
由于赋值运算符是从右向左结合的。
A d = ( new A().aob = new A() );
有没有其他方式可以解释一下?谢谢。
O2 --> O1 --> null
。其次,另一个可以进行垃圾回收的对象是在A c = new A();
中分配给c
的A
类型的原始实例。也许你已经知道了这一点,但它没有被提到,所以我想提一下。 :) - Ted Hopp