public class Test { /**
 * @param args
 */
public static void main(String[] args) {

String a="A";
StringBuffer A=new StringBuffer(a);
a="B";
StringBuffer B=new StringBuffer(a);
Test t=new Test();
t.ss(A, B);
System.out.println(A+","+B); }


public StringBuffer ss(StringBuffer a,StringBuffer b){
a=a.append(b);
System.out.println("1 "+a);
a=b;
System.out.println("2  "+a);
return a;

}}我认为的输出结果应该是:
1 AB
2 B
B,B
但是实际的输出结果是:
1 AB
2  B
AB,B
我不清楚第三个输出结果是怎么出来的

解决方案 »

  1.   

    a.append(b);
    这句话修改了t.ss(A, B);
    中参数A指向的StringBuffer对象的内容,使其成为AB了。
      

  2.   


    但是后面也有 a = b啊
    然后return a;
    此时 a 应该是 b 的值呢呀
      

  3.   

    ss方法里面不光有 a = a.append(b);还有 a = b; 呀 这就是我不能理解的地方。。
      

  4.   

    public class Test {    public static void main(String[] args) {        String a = "A";
            StringBuffer A = new StringBuffer(a);  //A指向的StringBuffer对象的内容是"A"
            a = "B";
            StringBuffer B = new StringBuffer(a);  //B指向的StringBuffer对象的内容是"B"
            Test t = new Test();
            t.ss(A, B);   //参数拷贝 
            System.out.println(A + "," + B);  //A的内容被修改了,B的内容没有改变
        }    public StringBuffer ss(StringBuffer a, StringBuffer b) {
            a = a.append(b);  //修改了a指向的对象的内容,也就是修改了参数A指向的对象的内容。
            System.out.println("1 " + a);  //输出 1 AB
            a = b;  //让a指向了b指向的对象,内容是"B",注意A仍然指向原来的对象,内容是"AB"
            System.out.println("2  " + a);  //输出 2 B
            return a;  
        }
    }
      

  5.   

    理解java方法的传值机制,值拷贝。实际参数A和形式参数a内容相同,但是他们是两个变量。让a=b,不影响A,A仍然指向原来的对象
      

  6.   

    我估计他是把A和a,B和b搞混了