public class Test {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
method(a, b);
System.out.println(a + "," + b);
}
static void method(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
}
请问为什么输出结果是AB,B??
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
method(a, b);
System.out.println(a + "," + b);
}
static void method(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
}
请问为什么输出结果是AB,B??
StringBuffer b = new StringBuffer("B"); 变量b 引用了 对象B
method(a, b); 调用函数method,并传递了两个变量a和b的值(这个值其实就是对象的引用,有点像C语言的指针值)static void method(StringBuffer x, StringBuffer y) { // 两个形参变量,简称:形参x 和 形参y
// 注意,函数调用刚开始的时候,形参x得到了变量a的值,那么也就引用了对象A
x.append(y); // 调用形参x所引用对象的append函数,那么其实可以理解为“对象A.append(对象B)”
y = x; // 形参y转而去引用形参x值,那么形参y就指向了对象A
}
但是注意到形参x和形参y的引用的变化,并不会对变量a和变量b产生之间影响。因为他们本来就是毫无关系的4个变量。
如果你还疑惑,可以在函数method最后增加一句话:
y.append(y);
再结合形参的问题导致你不可能写一个函数实现类似于 add(String x, String y),然后调用结束后 x对应的实参能变成 x+y