偶然看到了这么一个题
public class foo{
StringBuffer a =new StringBuffer("A");
StringBuffer b =new StringBuffer("B");
operate(a,b);
System.out.println(a+"."+b);
}
static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}}
问输出的结果是什么。如果你回答是AB.AB的话,那么显然对于java的传值方式还没有掌握。
如果理解了java的传递方式这道题是很好解决的。
首先a指向的是对象A,b指向的是对象B。
在operate()中,x指向的是对象A,y指向的是对象B。
x.appned(y)之一步,把对象A由A变成了AB。
而y=x只是让y的指向和x的指向一致,都是指向AB。
我们如果在operate中y=x之后,再加一句System.out.println(y);的话,这个过程就很清晰了。
可以看到,此时输出y是AB,而b不受影响。