http://community.csdn.net/Expert/TopicView1.asp?id=3222720

解决方案 »

  1.   

    12. Given the following,
     c
     第一次创建的x2和x3都可以被gc了14
     c/e
     上述的结果x2=x3=x4, x5=null和x5=x4都能造成一个对象没有被引用15
     e
     不能确定doStuff2(X x) 有没有保存引用
      

  2.   

    12题4.产生X2的instance1
    5.产生X2的instance2
    6,7把两个实例转移到两个属性上
    8.产生新实例instance3
    9.让x3也指向instance3
    答案是a,因为没有对象丢失14题x2 ----> instance 1
    x3 ----> instance 2
    x5 ----> instance 2
    x3 ----> instance 1
    x4 ----> instance 1
    x2 ----> nulla.  x3 ----> null(此时有x4指向instance 1)
    b.  x4 ----> null(此时有x3指向instance 1)
    c.  x5 ----> null(造成instance 2没有引用指向)
    d.  x3 ----> instance 1(不会产生变化)
    e.  x5 ----> instance 1(造成instance 2没有引用指向)
    所以答案是c,e15题答案是b,16行让13行产生的对象丢失我的答案和 TinyJimmy 稍有差异,如有错误,欢迎指正.
      

  3.   

    TinyJimmy 都做对了,不过能不能再具体解释一下
      

  4.   

    第二题解释比较详细就不赘述了
    第一题:
    虽然有
    6. x2.x = x3;
    7. x3.x = x2;
    引用了这两个对象, 但是经过
    8. x2 = new X2();
    9. x3 = x2;
    这两个对象的所属对象已经失去了引用, 所以可以被 gc() 了第三题:
    因为不能确定 doStuff2(X x) 的主体
    不知道里面有没有将这个对象加入某个容器(假设)等类似保留对象的操作
    所以不能确定
      

  5.   

    12. 虽然在
    X3 x2 = new X3();
    X3 x3 = new X3();
    X3 x5 = x3;
    x3 = x2;
    产生了一个循环引用, 但是这两个对象最后都没有被其他对象引用, 是可以gc的15.
    可以排除法, 证明x/y可以被引用或不被引用