简单题目请教..
public class A {
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,B
可是我觉得 x.append (y);改为x = x.append (y);才应该输出是AB,B啊...
哪位说下原因,先谢谢了...
------解决方案--------------------x.append (y); 已经对X进行了改变,所以不必再显式地给X赋值了.其它如replace也一样.
------解决方案--------------------LZ想弄明白这样的问题,从头到尾仔细分析。
首先从main方法入手。
StringBuffer a = new StringBuffer ( "A ");和StringBuffer b = new StringBuffer ( "B ");
new了a和b两个对象,通过operate传递给了operate方法。在此方法中x.append (y);也就是说对象有了实质的改变:对象a通过 x.append (y);又新增了对象B中的“B”,此时对象a变成了AB。
这道题的具体是看参数的传递。任何参数的传递其实都是传递对象的副本。而x.append (y);其实是改变了对象,而不是改动了副本。
------解决方案--------------------正如 shuai45(付出总有回报,要做就做最好.) 所说,这是一个形参与是实参的问题。StringBuffer是一个对象,a 作为参数传入operate方法,在operate中改变,而x相当于C中的指针,其中存储的是a的地址,x=y不会影响a的内容。