public class ex40(){
 public static void main(String[ ] args){
    StringBuffer a=new StringBuffer("A");
    StringBuffer b=new StringBuffer("B");
    method(a,b);
    System.out.println(a+","+b);
  }
Static void method(StringBuffer x, StringBuffer y){
    x.append(y);  
    y=x;        
  }
}运行结果:运行完为什么会为 AB,B?
谢谢了, 我以为运行后为AB,AB

解决方案 »

  1.   

    我深度怀疑最近1个月内问同样问题的都是看的一本书,有木有!!!-main第一行:new出一个StringBuffer"A"对象,并且以变量a指向这个对象
    -main第二行:new出一个StringBuffer"B"对象,并且以变量b指向这个对象
    -main第三行:调用函数,将a, b指向对象的地址拷贝给函数签名中的 x,y
    此时:a -> "A"对象 x-> "A"对象; b -> "B"对象 y -> "B"对象       ->  表示  指向  的意思-method第一行:x调用append方法(即x所指对象A调用方法),其结果是对象A变成了 "AB"
    -method第二行:y=x 表示 将x指向的对象地址拷贝给y,即 y -> "A"对象
    -method退出-main第四行:输出a,b所指对象(通过调用其toString()方法使其能够被输出,这里不讨论)
    注意:method第二行所作改变仅对y有效,这一句话并没有改变b的指向
    所以a 仍旧指向"A"对象,b仍旧指向"B"对象
    打印出AB B
    罗嗦了  烦躁
      

  2.   


    补充一下,其实method执行到y = x;时,这时y指向的应该是AB,因为这时的x其实已经是指向AB了!
      

  3.   

    给a增加了b,但是b没有改变。
    输出时,a变了,b没变