一个经典的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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章