public class test {
      public static void main(String[] args) 
{
   StringBuffer  a=new StringBuffer("a");
            StringBuffer  b=new StringBuffer("b");
            operate(a, b);
            System.out.println(b);
         }
static void  operate(StringBuffer x,StringBuffer y)
{
   x.append(y);
   y=x;
}}
为什么结果只输出一个b  而不是ab??

解决方案 »

  1.   

    你只是直接打印输出b,当然只是“b”了。public class test {
        public static void main(String[] args) {
    StringBuffer a = new StringBuffer("a");
    StringBuffer b = new StringBuffer("b"); System.out.println(operate(a, b));
    } static StringBuffer operate(StringBuffer x, StringBuffer y) {
    x.append(y);
    y = x;
    return y;
    }} 
      

  2.   

    static void  operate(StringBuffer x,StringBuffer y) 

      x.append(y); 
      y=x; 
    } 关键是这个方法,传进这个方法的是两个对象的引用,这个应该知道。
    这个时候指向第一个对象的是变量a、x,指向第二个对象的是变量b、y。
    然后在x上执行append,这是对对象的操作,所以字符串“b”加到了“a”的后面。
    然后y=x,这个是变量的赋值,只是令y变量指向x变量所表示的对象,对主函数里的a、b变量没有影响。
      

  3.   

    append改属性可以,
    x=y重赋值不可以
    可以把这理解为传值。
    形参是引用的拷贝只能操作对象,改变赋值不影响实参~
      

  4.   

    java的参数传递有两种 
    1:基本类型,传递这个基本类型的副本,不会改变被传递参数的值 
    2:对象类型,传递这个对象的值,因为java没有指针,所以仅仅可以改变参数的内部状态,不可以改变它的重新指向。
    StringBuffer虽然是个对象,但其内部操作的是基本类型char,因此其作为参数传递时是不会改变值的。
    希望能给你帮助!