关于append的问题,打印结果不同 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于append的问题,打印结果不同

2016-02-17 22:39:53 1821 1
public static void main(String[] args) {
    StringBuffer a = new StringBuffer("A");
    StringBuffer b = new StringBuffer("B");
    operator(a,b);
    System.out.println("main方法:" + a + "," + b);

}

private static void operator(StringBuffer a, StringBuffer b) {
    a.append(b);
    b = a;
    b.append(a);
    System.out.println("operator:" + a + "," + b);
}

结果如下
operator:ABAB,ABAB
main方法:ABAB,B
取消 提交回答
全部回答(1)
  • 51干警网
    2019-07-17 18:29:19
    已采纳

    你在operator方法中,当b=a时,b所对应的内存,已经不是原来new 出来的内存,而是和a指向了同一块内存,所以在后面的b.append(a)中,a才会输出ABAB;而b的内存和a是同一块,所以b也是ABAB。
    而在main中,a所在内存的值已经变为ABAB了,但是b的内存由于在operator的b.append之前,所指的内存已经改变,所以还是B
    要是一样的话,可以按我下面写的

    public class Test {
    static StringBuffer a=null;
    static StringBuffer b=null;
    public static void main(String[] args) {
    a= new StringBuffer("A");
    b = new StringBuffer("B");
    Test t=new Test();
    t.operator(a,b);
    System.out.println("main方法:" + a + "," + b);
    }
    private  void operator(StringBuffer c, StringBuffer d) {
        a=c;
        b=d;
        a.append(b);
        b = a;
        b.append(a);
        System.out.println("operator:" + a + "," + b);
    }
    }
    0 0
+关注
51干警网
阿里云论坛版主,QQ 1978638808
58
文章
9431
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载