public class Test60 
{

public static void method(StringBuilder x,StringBuilder y)
{
x=y;
x.append(y);


}
public static void main(String[] args)
{
StringBuilder a=new StringBuilder("A");
StringBuilder b=new StringBuilder("B");
method(a,b);
System.out.println(a+","+b);
}
}

解决方案 »

  1.   

    public static void method(StringBuilder x,StringBuilder y) 

    x=y; 
    x.append(y); 
    }x=y其实是修改了x的引用值,是不会返回的。只有对这个引用指向的内容作出修改才会返回。
    所以x=y以后,我们对 x.append(y); 就像当与对x当前的引用内容作出修改。
    修改完毕后,在这个函数范围内:
    x,y都指向同一内容。但超出这个函数范围,x引用恢复,y引用值内容发生变化。
      

  2.   

    解释这个程序的打印结果啊
    结果是:A,BB
      

  3.   

    首先我们用以下代码来测试:public class Test {
        public static void method(StringBuilder x,StringBuilder y){ 
            System.out.println(x+","+y);
            x=y;
            System.out.println(x+","+y); 
            x.append(y); 
            System.out.println(x+","+y);
        } 
        public static void main(String[] args){ 
            StringBuilder a=new StringBuilder("A"); 
            StringBuilder b=new StringBuilder("B"); 
            method(a,b); 
            System.out.println(a+","+b); 
        }
    }
    输出结果为:
    A,B
    B,B
    BB,BB
    A,BB由于StringBuilder是对象,变量所存的是地址,虽然是按值传递,但实质是地址。
    x=y  :是将y的地址赋值给x,即x现在所指的是y所指的内容,所做的一切将会直接影响到y所指的内容。
    在method()中,x所指的内容并没有改变。
    所以得到最终的结果:A,BB
      

  4.   

    过程:首先由于StringBuilder是对象,故method方法的参数都是引用,即指向堆里面的实际对象内容。当调用method(a,b)时候对象a,b分别复制了一份引用,分别为StringBuilder x=A*,StringBuilder y=B*.现在方法里面执行x=y时,即是A*指向了B*要指向的内容,此时A*==B*。然后x.append(y)后B*所存的内容就变成了BB(原来的一个B在加上自己y引用,此时y自动调用了默认的toString()方法,因为append方法默认参数是String。)故而现在就是A*和B*都指向了堆里面一个“BB”对象。现在叫你打印原来a,b引用的对象内容,那么肯定就是A,BB(a引用没变 只是它的复制A*变了)。