StringBuffer[] sbs = new StringBuffer[]{sb,null};
通过这句,将sbs指向sb先前申请的空间,所以,即使sb后来指向了null,不过其原来的内容通过sbs还是可以访问的,所以打印出来的sbs[0]就是abc了.
sbs[0]=null;//这句后,sb申请的空间才真正的没有人引用了,
sbs = null;这句是将sbs指向null

解决方案 »

  1.   

    楼主执行一下下面的代码,根据打印的结果可以更好的判断!!public class Testt {
     public static void main(String[] args) {
            StringBuffer sb = new StringBuffer("a");
            StringBuffer[] sbs = new StringBuffer[]{sb,null};
            System.out.println("地址是否一致"+(sb==sbs[0]));
            sb.append("b");
            sb = null;
            System.out.println("地址是否一致"+(sb==sbs[0]));
            sbs[0].append("c");
            sb = new StringBuffer("a");
            System.out.println(sb);//打印a
            System.out.println(sbs[0]);//打印abc
            sbs[0] = null;
            sbs = null;
        }}StringBuffer[] sbs = new StringBuffer[]{sb,null}; 里面存放的是sb的原始地址
    执行sb = null;这一句后 
    sb指向新的地址
    但 sbs 中还是原始sb地址
      个人意见,仅供参考,敬请斧正