StringBuffer[] sbs = new StringBuffer[]{sb,null};
通过这句,将sbs指向sb先前申请的空间,所以,即使sb后来指向了null,不过其原来的内容通过sbs还是可以访问的,所以打印出来的sbs[0]就是abc了.
sbs[0]=null;//这句后,sb申请的空间才真正的没有人引用了,
sbs = null;这句是将sbs指向null
通过这句,将sbs指向sb先前申请的空间,所以,即使sb后来指向了null,不过其原来的内容通过sbs还是可以访问的,所以打印出来的sbs[0]就是abc了.
sbs[0]=null;//这句后,sb申请的空间才真正的没有人引用了,
sbs = null;这句是将sbs指向null
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地址
个人意见,仅供参考,敬请斧正