一個經典的java傳遞問題

偶然看到了這麼一個題

public class foo{

public static void main(String[] args) {
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不受影響。

發佈了32 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章