class BufferTest
{
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
modify(a,b);
System.out.println(a+","+b);
}

public static void modify(StringBuffer x,StringBuffer y)
{
y.append(x);
y=x;
}
}
运行结果是:A,AB
对于这个结果怎么想也想不明白,似乎y=x这条语句根本不起作用
这次笔试感觉挺郁闷的,题目全是英文的就不说了,还必须得用英文来答题

解决方案 »

  1.   

    结果是 A,BA 不是 A,AB..这是船值跟传引用的问题..最后一句是没有作用的.
      

  2.   

    这个问题 我好象在 CSDN 里面发过帖子的 
    ```
    http://topic.csdn.net/u/20080602/20/8ca7854a-ed9e-4d6d-91c7-a1791c66bdf1.html
      楼主 去看下吧 `
      

  3.   

    y.append(x); // 这句话变更了y对应的对象的内容
    y=x; // 这句话让 y 等于 x但可以,x和 y本身是指向对象的指针,而他们有事方法的局部变量。在调用方,仍然有a b 分别指向原始的对象。
      

  4.   

    public static void modify(StringBuffer x,StringBuffer y) 

    y.append(x); 
    y=x; 
    } 在这个方法中,xy作为局部变量存在,离开这个方法,xy也就不存在了
    对于其本身引用的修改不会反映到外部
      

  5.   

    传引用与传值问题,最好是能自己去画出内存的情况.x与y都只是局部变量,出了modify函数后就被释放了,在modify里面,虽然y与x指向了相同的对象,但b还是指向它原来指向的对象啊
      

  6.   

    modify(StringBuffer x,StringBuffer y) 
    传进去的只是参数引用的副本.复制,copy?
      

  7.   

    传引用与传值问题,最好是能自己去画出内存的情况.x与y都只是局部变量,出了modify函数后就被释放了,在modify里面,虽然y与x指向了相同的对象,但b还是指向它原来指向的对象啊
      

  8.   

    参数传递的时候
    引用x,y分别是引用a,b的副本
      

  9.   

    我用debug进行了步步操作,这个过程是
    从mail 开妈,
    a[0]=Ab[0]=B
    调用方法,
    x=A,
    y=B,
    y=BA
    y=A之后,回到mail中,
    a[0]=Ab[0]=B
    b[1]=A因此,a=A,b=BA
    这个全部的过程,可能明白呀!
    在调用过方法之后,b[0]并没有重新赋值,而是加上了b[1]=A的操作!
      

  10.   

    也就是说,b[1]的赋值,是在同y.append(x)时,同进赋值所得的,到y=x时,b[] 已经不变啦,