举个例子,是我在学习过程中遇到的,应该是参数传递方面的知识(ps:概念不是很清楚,错了请指正)
第一个:
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
new TestStringBuffere().operate(a,b);
System.out.println(a+","+b);
public void operate(StringBuffer a, StringBuffer b) {
a.append(b);
System.out.println("a:"+a);
b=a;
System.out.println("b:"+b);
}
//输出结果
a:AB
b:AB
AB,B //我原以为这里应该是AB,AB
初学的时候,这个输出结果让我很不解,所以深入学习了一番。
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
执行到上面这一句的时候内存图如下:
当执行到
new TestStringBuffere().operate(a,b);
这里的时候内存图如下
首先是为形参分配内存,并且该形参变量和变量b引用同一个对象
接着进入函数内部
a.append(b);
这时候,a的引用对象发生了改变,并且形参b重新指向了a的引用对象
到此为止,不难发现,从始至终我们的变量b都没发生改变。
所以最后的输出结果不言而喻,就是
//输出结果
a:AB
b:AB
AB,B