解释如下:
 1、至于输出前部分为“AB”我就不讲了, 你也知道
 2、你觉得奇怪的是后部分为“B”为什么没有改变!!!
实际上是你的“y = x;” 错了,不能这样写! 
你可以这样
y.setCharAt(0,'a');   也可以用StringBuffer的insert方法

解决方案 »

  1.   

    你犯了原则性的错误。
    java的参数是按值传递的。
    在方法中你不可以改变b的地址。
    所以在函数返回后b仍然等于B.
      

  2.   

    楼上说得对。在方法中虽然改变了引用,但返回后,b还是指向原来的StringBuffer对象的。
      

  3.   

    注意:
    在main中a,b代表的都是實例,也就是一個地址值
    你可以調用這個實例的方法去改變他的屬性,但你不可能去改變這個實例
    在內村中的地址
      

  4.   

    谢谢大家,我是这样理解的你们看对不对:方法中的y只不过是对象b的一个别名,当方法结束以后,他也就不存在了,对y的改变不会影响到b。除非用对象b自身的方法来改变自己的属性,就像对象a中的append,所以a改变了。这样说对吗?30分钟后结贴
      

  5.   

    static void operate (StringBuffer x, StringBuffer y)  {
          StringBuffer temp=new StringBuffer(x.toString());
         x.append(y);
               y.insert(0,temp);
         }
    这个函数体可以返回AB AB的调用函数时候任何对y的赋值操作都只局限于地址的改变,而在返回时全部无效,但是对这个地址所指向的对象的操作都会保留下来