StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a, b);
System.out.println(a+","+b);
}

public static void operate(StringBuffer x, StringBuffer y){
x.append(y);   
y = x;
}
执行结果为什么为AB,B啊! 各位请帮忙解释下啊

解决方案 »

  1.   

    StringBuffer b和StringBuffer y不是同一个对象,所以y = x;只是改变了y而b并没有改变
      

  2.   

    x.append(y); 等于执行了a.append(b)
    但是b对象本身没改变,b和y不一样的
      

  3.   

    这里传递的是引用:
    operate(a, b)执行这个的时候在栈中新建了x,y;
    x,a引用相同,x.append(y)也就a.append(b);
    而对与y=x;这个只是就换了y的引用并没有改变b,b还是引用原来那个
    你可以这样理解在栈中共有4个变量,因该弄清楚了
      

  4.   

    yxa 的值AB
    b的值是B
    测试哈就知道
    public class Student {public static void main(String[] args) { StringBuffer a = new StringBuffer("A");
    StringBuffer b = new StringBuffer("B");
    operate(a, b);
    System.out.println(a+","+b);
    } public static void operate(StringBuffer x, StringBuffer y){
    x.append(y);  
    y = x;
    System.out.println(y);
    }}