y=x;
这一句没有任何意义,这只是改变了局部变量的指向,并没有修改哪一个对象,所以对外部无影响。而且永远不要对局部变量进行赋值操作(如a = b),尽量不要修改局部变量的值(如a++),除非你200%地清楚你在干什么,并且这样做非常必要。

解决方案 »

  1.   


    public static void operator(StringBuffer x,StringBuffer y){
                   // x 的拷贝变为了AB,x 的拷贝和x 指向同一个内存地址,所以x 变为了AB
                  x.append(y); 
                   //  y 的拷贝指向了x 的拷贝的地址,也就是x 的地址,那么y 的拷贝将不再影响y 的指向
                  //  所以 y 的值依然为B 
                  y=x;                
    }
    记着一点就行了,java传递的是拷贝,在方法内改变了拷贝的指向,那么后面做的任何事情都不影响原值了
    如果在 y=x; 后再添加一行 y.append("hello"); 那么a 的值就变为 ABhello 了 
      

  2.   

    java中只有传值,后面的y=x 相当于y引用了x的位置 但没有改变值
      

  3.   

    我是这样理解的:
    public class Foo {
           public static void main(String[] args) {
                  StringBuffer a=new StringBuffer("A");     //开辟一块内存   id=21
                  StringBuffer b=new StringBuffer("B");    //开辟一块内存   id=25
                  operator(a,b);
                  System.out.println(a+","+b);                    //打印出来内容是  内存地址的存放内容
           }
           //注意了。id21,id25两个StringBuffer传过来
           public static void operator(StringBuffer x,StringBuffer y){
                  x.append(y);                                                //这个操作,id21的值变成了‘AB’       
                  // y.append(x);           在y=x既是改变y的id之前,你试试 ,输出不一样哦          
                  y=x;                                                               //这个操作,把y的id由id25变成id21,之后操作y也不会改变id25的值
                 // y.append(x);            在y=x既是改变y的id之后,你试试 ,输出不一样哦        
           }
    }建议:多理解基础,这都是原理的东西