class Foo{
public static void main(String arg[]){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+" ,"+b);

}
static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}

解决方案 »

  1.   

    class Foo{
    public static void main(String arg[]){
    StringBuffer a=new StringBuffer("A");
    StringBuffer b=new StringBuffer("B");
    operate(a,b);
    System.out.println(a+" ,"+b);

    }
    static void operate(StringBuffer x,StringBuffer y){
    x.append(y);
    y=x;//这里y指向了x,并不会把值再传回主函数中,因为java调用是传值的,也就是传值的一个复制,不会影响原来的值.
    }
    }
      

  2.   

    此问题主要是看参数传递~
    任何参数的传递都是对象副本的引用.
    static void operate(StringBuffer x,StringBuffer y)
    {
      x.append(y);
      y=x;
    }
    在x.append(y)中通过append直接改变的对象的本质,将对象a中的内容变为AB,
    而y=x没有改变对象的实质.所以依旧不变.
    最后的结果应该是AB,B
      

  3.   

    参考http://community.csdn.net/Expert/topic/5527/5527618.xml?temp=.6923792
      

  4.   

    传值传参的问题,StringBuffer与String的不同之处,弄明白就好了
    还是不懂,单步调试一下就ok
      

  5.   

    参数传过来的是引用的一个复制
    你改这个引用,改不了原来的引用
    不过你改了引用的对象,对象就变了
     x.append(y);是改对象
      y=x;是改引用