public static void main(String sgf[]) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a, b);
System.out.println(a + "," + b);
} static void operate(StringBuffer x, StringBuffer y) {
x.append(y);// 在此x经append(y)之后就变成了AB
y = x;// 为啥y没有改变呢?
}

解决方案 »

  1.   

    x.append 操作的是x对象,所以变了
    y = x 操作是改变一个变量的指向,而且是一个局部变量
      

  2.   

    一个是改变了对象内部的值  所以返回以后一样改变了一个是改变了变量的引用,所以返回了还是没变。java的值传递没有引用传递的, 再怎么传,传过去的值的引用还是不会变,,但是引用的内部可以改变所以java里面没有swap()函数
      

  3.   

    在本示例中,没改变的原因应该是x.append(y);// 这里改变了引用所指向的对象的值
    y = x;// 这里只是一个赋值操作
      

  4.   

    x.append(y)后x和a指向的还是同一个对象
    y = x后y和b已经指向不是同一个对象,b指向的还是原来的,y指向的已经是x指向的对象了
    你这样输出下就能看的出来了public static void main(String sgf[]) {
            StringBuffer a = new StringBuffer("A");
            StringBuffer b = new StringBuffer("B");
            operate(a, b);
            System.out.println(a + "," + b);
        }    static void operate(StringBuffer x, StringBuffer y) {
            x.append(y);// 在此x经append(y)之后就变成了AB
            y = x;//这里y已经指向了x所指的对象,值为AB了
             System.out.println(x + "," + y);
        }
      

  5.   

    有图解,自己去看http://www.java2000.net/viewthread.jsp?tid=4124