有一类如下:
public class Test{public static void operate(StringBuffer x,StringBuffer y){
    x.append(y);
    y=x;
  }
  public static void main(String args[]){
    StringBuffer buffA=new StringBuffer("a");
    StringBuffer buffB=new StringBuffer("b");
    operate(buffA,buffB);
    System.out.println(buffA+","+buffB);}
问各位大侠,不上机运行,你认为该程序输出什么?为什么是那个结果?
请教!
若是把最后一句改成System.out.println(buffA+buffB)会怎样呢?

解决方案 »

  1.   

    不就是return a+b的的值吗?有什么问题!
      

  2.   

    反正这个语句System.out.println(buffA+buffB)是不行的
    因为java里面只是对String重载了+运算符。
      

  3.   

    结果是ab,b
    x,y,buffA指向同一个对象“ab"
    buffB指向b
      

  4.   

    一开始是:
    buffA----->a
    buffB----->b当调用operate(buffA,buffB);以后就变成:
    buffA=x------>a
    buffB=y------>b
    当x.append(y);时,因为buffA=x是指向同一个对象,所以buffA=x------>ab
    而当y=x;又有
    y--------->ab而buffB不便仍指向b
      

  5.   

    如楼上的
    当x.append(y);时,因为buffA=x是指向同一个对象,所以buffA=x------>ab
    而当y=x;又有
    y--------->ab我就是这里不太明白,buffA=x是指向同一个对象 那么buffB=y不是指向同一对象?
    string,stringbuffer传参数到底是怎样的呢?
      

  6.   

    正如wuyafeixue(蓝色天空) 所讲
    结果是ab,b
    x,y,buffA指向同一个对象“ab"
    buffB指向b有因为 java只有值传递 所以 
    operator方法中的y=x 对于外部的 buffB没有效果所以 应该是 改前ab,b  
    至于 改后 应该为abb吧 +运算可能会进行 toString()方法造作的 我也不确定
    等一下 做个例子看看 呵呵
      

  7.   

    不改时是 ab,b
    改了报错了"Test.java": operator + cannot be applied to java.lang.StringBuffer,java.lang.StringBuffer at line 13, column 29
      

  8.   

    改之前:
    由于StringBuffer按地址传递
    一开始
    buffA-->a,
    buffB-->b,
    当调用operate()方法时候x-->a,y-->b,
    x.append(y);
    后,buffA,x-->ab
    y=x后,y-->ab
    返回来时候,buffA-->ab,buffB-->b,所以就是ab,b
    改之后由于StringBuffer出错误
    不知道我的理解可以吗,还望指正
      

  9.   

    to:packtrixie(恶魔) 
    你怎么搞清楚了啊
    说一下啊
      

  10.   

    任何引用类型都存在这个特征的乜,stringbuffer制式用来演示比较方便而以