public class test4{   
  //static String x="10";
  //static String m="3";
  static StringBuffer   c=new   StringBuffer("C");   
  static StringBuffer   d=new   StringBuffer("D");
  public   static   void   main(String[]   args){   
  StringBuffer   a=new   StringBuffer("A");   
  StringBuffer   b=new   StringBuffer("B");
  test4 test=new test4();  String n="4";  operate(a,b);
  test.setvalue(c);
  System.out.println(a+"."+b+","+d);
  }
  static   void   operate(StringBuffer   x,StringBuffer   y){   
  x.append(y);
  y=x;
  //System.out.println(x+"."+y);   
  }
  public void setvalue(StringBuffer t)
  {
    d=t;
  }
  } 
为什么结果不是AB.AB,C,而是AB.B,C?

解决方案 »

  1.   

    static   void   operate(StringBuffer   x,StringBuffer   y){   
      x.append(y);
      y=x;
      //System.out.println(x+"."+y);   
      }
    首先要搞清楚java中的傳值與傳引用在方法里StringBuffer   x,StringBuffer   y
    x引用a對象 y引用b對象
    x.append(y);------a里面的改變了成了'AB',x還是引用a
    y=x;--------------y的引用變為與x相同,引用a其實到最后僅僅因為方法x.append(y)改變了對象的值,其它只是引用改變了;
      

  2.   

    同意楼上哥们的说法,补充几句
    y一开始是指向b的,后来y=x,把x引用赋给y,y指向了a,所以原来b的值没有改变