public class Retger
{
 public static void change(StringBuffer a,StringBuffer b)
 {
 a = new StringBuffer("333");
 a.append(b);
  //a=a+b;
  b=a;
 }
 public static void main(String args[])
 {
  StringBuffer a= new StringBuffer("A");
  StringBuffer b= new StringBuffer("B");
  change(a,b);
  System.out.println(a+","+b);
 }
}
问 为什么a.append(b);后a会改变,而a=a+b;后a没变化!(望详细)

解决方案 »

  1.   

    这样的问题在csdn上已经发过无数次了,至少最近几天就见好好几次
      

  2.   

    a.append(b),a一直是一个引用,a=a+b又生成了一个新的引用,main函数中的a不变!
      

  3.   

    相当于你有一斤肉,你复制(传值)了一份,送给了change,然后change加工成了一道回锅肉。你也想你的那块肉也变成回锅肉?public class Retger 

    public static StringBuffer change(StringBuffer a,StringBuffer b) 

    a = new StringBuffer("333"); 
    a.append(b); 
      //a=a+b; 
      b=a; 
    return a;

    public static void main(String args[]) 

      StringBuffer a= new StringBuffer("A"); 
      StringBuffer b= new StringBuffer("B"); 
      a = change(a,b); 
      System.out.println(a); 


      

  4.   

    package linhui1;public class Foo {

    public static void change(StringBuffer a,StringBuffer b) 

      
        a = new StringBuffer("333");
        System.out.println(a+" , "+b); 
    a.append(b); 
      //a=a+b; 
      b=a; 
      System.out.println(a+" , "+b); 
       } 
     
    public static void main(String args[]) 

      StringBuffer a= new StringBuffer("A"); 
      StringBuffer b= new StringBuffer("B"); 
      change(a,b); 
      System.out.println(a+" , "+b); 



    结果:
    333 , B
    333B , 333B
    A , B
      

  5.   

        这个可以么?
    StringBuffer a = "",b = "";
    a = a + b;
        我记得好像StringBuffer是不能相加的吧。
      

  6.   

    和八楼一楼,StringBuffer可以相加吗??迷糊了。
      

  7.   

    StringBuffer是一个对象,对象a=对象b是将b的引用(地址)赋给a,a就被改变了.
    a.append(b),a对象还是a对象,只是将b的数据追加到a的数据的后面.
      

  8.   

    恩 这个没改!应该是a=a.append(b);