62,614
社区成员
发帖
与我相关
我的任务
分享
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);
//想象成
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
//operate(a,b);
{
_a = a;
_b = b;
_a.append(_b);//_a指向的对象append了_b指向的对象。因为a也是执行_a指向的对象,即对a指向的对象产生了影响
_b=_a;//_b指向什么对象对b来说没有什么意义
}//_a,_b生命周期结束
System.out.println(a+","+b);
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a, b); // 把 a, b 的指向两个string buffer 的内存地址的值传进去
System.out.println(a + "," + b);
}
static void operate(StringBuffer a, StringBuffer b) {
a.append(b); // a 现在指向传入的 StringBuffer("A") 实例的内存地址
// 这个引用的实例被改动,变成了 AB
b = a; // 但是这里b 原来引用的 StringBuffer("B")实例的内存地址被改了,不再指向传入的这个内存
// 地址,而是指向了 a 所引用的内存地址。
// 因此这个方法执行完以后,传入的b 所引用的实例没有改变
}