public class Foo
{
public static void main (String[] args)
{
Foo f = new Foo();
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
f.operate(a, b);
System.out.println("a = " + a + "\n" + "b = " + b);
}
public void operate (StringBuffer x, StringBuffer y)
{
x.append(y);
y = x;
System.out.println("x = " + x + "\n" + "y = " + y);
}
}
输出:
x = AB
y = AB
a = AB
b = B
如上,operate方法中的y输出了AB,为什么输出的最后一行却是:b = B,而不是:b = AB?
难道b是以值传递的方式传入了operate方法中?那又如何解释a的输出呢?
谢谢!

解决方案 »

  1.   

    public void operate (StringBuffer x, StringBuffer y)
    {
    x.append(y);//这里的x并不是方法外的a,只是指向了和a一样的内存地址,执行x.append(y);后,往x志向的内存地址追加内容y,因为x和a指向相同的地址,所以在方法外,a的内容和x的内容是一样的
    y = x; //这里的y不是方法外的b,只是指向了和b一样的内存地址,执行y=x后,只是把y的指向改变了,b没有任何改变
    System.out.println("x = " + x + "\n" + "y = " + y);
    }