public class StringTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a,b);
System.out.println(a.toString() + "," + b);
}

static void operate(StringBuffer x, StringBuffer y) {
// TODO Auto-generated method stub
y.append(x);
// System.out.println("=============");
// System.out.println("y=:"+y+"这是传入的b");
// System.out.println("x=:"+x+"这是传入的a");
y = x;
// System.out.println(y = x);
// System.out.println("-------------");
// System.out.println("y=:"+y);
// System.out.println("x=:"+x);
// System.out.println("=============");
}

}

结果:A,BA

 

  比如string a=A这里字符"A"会开辟一个物理地址来储"A"这个值,引用a也会开辟一个物理地址用来存放字符"A"存储的所在地址。当你用string b = a来赋值的时候,是把a的物理地址传递给b而不是字符"A"的地址。这时候改变b引用的内容,丝毫不会影响到a引用的内容。然后方法结束后这两个临时的变量a和b都被抛弃了,这丝毫不会改变y所引用的对象。