public class Foo {
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operator(a,b);
System.out.println(a+","+b);
}
public static void operator(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}
//最近看到这道题,网上好多错误解答,为防止初学者被误导,特发文与大家探讨~
先说结果:AB,B
关键点在于: 运行至operator方法时,是将实参a,b的值复制后,传递给x,y,传给x,y的是地址的复制品,
所以x能访问到对象"A"并在其后追加“B”,追加后,对象变为“AB”,注意引用a指向的也是这个对象;
y=x,意思为将x的值(地址)赋给y, operator方法运行结束后,即消失,不会对主程序有影响。
最后,System.out.println(a+","+b), a是“AB”,b仍然是“B”。