public class Mytest2 {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
Operater(a, b);
System.out.println(a + " " + b);
}
public static void Operater(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
}
//这个输入结果是:AB B
//原理怎么解释啊?
//但是当在operater(a,b);打断点后,并观察x.append(y)的值时,结果会出现变动经常不一样!在eclipse下
a的引用被传入方法中,被添加了一个字符串"B",a的引用指向的值是"AB",y=x是把a的引用赋给了b,但是由于方法的运行是在栈中,一旦弹栈,就会被销毁,所以mian方法中的b的引用还是原来的那个,所以会输出AB B的结果.
如果把Operater方法改成返回y,然后在main方法里面用b接收,那么b的值应该会改变成A吧
mian方法中的b的引用还是原来的那个
应该是栈和堆得知识吧
类似这样: