public class Test1
{
static void swap(StringBuffer a,StringBuffer b)
{
a.append(" more");
b=a;
}
public static void main(String args[])
{
StringBuffer a=new StringBuffer("One");
StringBuffer b=new StringBuffer("Two");
swap(a,b);
System.out.println("a is "+a+"\nb is "+b);
}
}
这是JAVA传参的问题,
你把
StringBuffer a=new StringBuffer("One");
StringBuffer b=new StringBuffer("Two");
改成
StringBuffer A=new StringBuffer("One");
StringBuffer B=new StringBuffer("Two");
就会更明白问题了。
首先new完后对象引用A、B分别指向地址[A]、[B]
然后swap(A,B),把对象引用A、B的地址传给另两个对象引用a、b
然后在swap方法中通过a.append(" more")改变了A和a共同指向的地址[A]
而b=a只是把对象引用b指向a的地址[A]而已,不影响对象引用B
OneTwo,Two
OneTwo,OneTwo