public class A {
public static void main(String args[]){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);
}
private static void operate(StringBuffer a, StringBuffer b) {
// TODO Auto-generated method stub
a.append(b);
b=a;
}
}
大家觉得结果会是什么呢?求解释。

解决方案 »

  1.   

    operate方法中的b=a就没有意义了。一旦将a赋给b,那么b就和原来的传递的b对象没有了关系,当b=a;执行结束后,这个对象的作用域也就没有了。
      

  2.   

    我运行过了肯定知道结果,但是我想不通的是,为什么不是AB,AB呢?如果将b=a放在main()中就是AB,AB到底为什么啊。高手解释下
      

  3.   

    输出结果是AB,B   主要还是static对方法的作用以及StringBuffer的线程问题。
      

  4.   

    在operate方法中。参数b,b=a;那么这和b=new StringBuffer();没有上面区别,现在外部的b已经和这个内容的b已经不同了,这时内部b就相当于个局部变量了。作用域仅仅是该方法内。
      

  5.   

    同意2楼说的,就是AB和B。
    StringBuffer b=new StringBuffer("B");这句中的b我用b1表示,operate方法中b我用b2表示。
    当你调用operate(a,b),传递的是单元的地址。你将b1指向单元的地址传递给了operate方法中的b2
    再operate方法中执行a.append(b);后,a指向的单元的内容就变成"AB"了,你再令b=a,这样b2中存放的指向单元的地址就变成和a中的地址一样了,也就是说b2不再指向以前存放"B"的单元了,而是指向存放"AB"的单元了。但请注意,此时b1中存放的指向单元的地址并没有改变,所以调用输出方法时输出b1的内容仍是"B".不知说的你明白不?
      

  6.   

    输出是AB,B
    作用域仅仅是该方法内。嗯,把b=a放在main中,就是AB,AB引用不知道几楼的:
    /operate方法中的b=a就没有意义了。一旦将a赋给b,那么b就和原来的传递的b对象没有了关系,当b=a;执行结束后,这个对象的作用域也就没有了。/言外之意是说在方法里进行这样的赋值没有任何意义?
      

  7.   

    public class Test {
        public static void main(String args[]){
         //定义2个可变的String型,并分别传入A、B;
        StringBuffer a=new StringBuffer("A");
        StringBuffer b=new StringBuffer("B");
        //调用静态方法,将a,b的值丢进去
        operate(a,b);
        System.out.println(a+","+b);
        }
       
        private static void operate(StringBuffer a, StringBuffer b) {
        // TODO Auto-generated method stub
         //在可变的String型字符串a中,添加可变的字符串b  
         //那么,a中本身的 A 又添加了b中的元素 B 
        a.append(b);
        //接着把a的值赋给b
        b=a;
    }
    }在这里,我是这么理解的,不知道你认不认为。
    我上面的注释没问题,
    重点是在调用静态方法operate(a,b)的时候,你传进去的是什么?
    a调用append方法之后里面的元素变成了AB,都没异议吧?
    然后,接着把a赋值给了b ,重点是,这个b到底是不是main方法的那个b?
    赋值之后关闭operate方法,删除内存空间里面的一切信息,这里的b会引用传递给外面的b吗?
    答案是否定的,operate传进来的是b1 ,而这里的b=a;到底用过了这个b1没有?
    没有吧?  它跟外面的那个b已经没什么联系了 
    等operate方法调用完毕,删除了内存空间的信息,这个b=a 也就不复存在了。  这个b从诞生到结束,根本就没有被引用。。