偶然看到了這麼一個題
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不受影響。