public class Test {
  public static void main(String[] args) {
StringBuffer a=new StringBuffer ("A");
StringBuffer b=new StringBuffer ("B");
oper(a,b);
System.out.print(a+","+b);
}
  static void oper(StringBuffer c,StringBuffer d){
  c.append("B");
  d=c;
  }
}
此小程序的输出结果是;AB,B;但是我实在想不明白.我认为应该为:AB,AB;为什么用append赋值的结果与直接赋值的结果不一样那?

解决方案 »

  1.   

    问题在引用类型参数的传递上
    在你的程序中当把b引用传递给d引用时,只不过是在oper方法内部又新建了一个StringBuffer类型的引用d,并且d指向内存中的“B”对象,在程序一开始的时候b引用就指向了“B”对象,所以在执行oper函数的时候有两个引用指向“B”对象,oper中执行d=c时将引用d指向了“AB”对象
    而b引用仍然指向“B”对象,所以输出结果为AB,B