A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 光脚丫的小白兔 中级黑马   /  2013-10-8 21:47  /  1554 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class FOO {

        /**
          * @param args
          */

        public static void main(String[] args) {
                 // TODO Auto-generated method stub
         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);
        y = x;
        y.append("A");
     }
        
}

为什么输出结果是ABA,B
求教...

评分

参与人数 1技术分 +1 收起 理由
To + 1 多来论坛发帖

查看全部评分

4 个回复

倒序浏览
本帖最后由 jìng╮煜 于 2013-10-8 22:06 编辑

逗号之前的.
首先 StringBuffer a = new StringBuffer("A");   a容器里面有了一个A了
然后  x.append(y);    又添加了一个B
再然后 y=x;的意思就是 y的指针指向了a的容器. 所以a的容器添加进了一个A.所以是ABA.但是y没有指向b容器,b容器自然没有添加进元素.就是这样

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
a,b都是引用,分别指向内存中的A、B
当你调用operate()方法时,开辟栈内存,
x,y也分别指向内存中的A、B,
x操作堆内存中的空间将A添加B,此时A所在的空间为AB,
然后将x的引用传给y,此时y也只想A所在的堆空间即AB,
y操作AB所在堆空间继续添加A,此时A所在空间内容为ABA。
operate()方法调用结束,x,y释放,但堆内存中操作的内容却保留了下来。
返回到main函数继续执行,此时a、b依然分别指向A、B所在堆内存
只是A中内容变为ABA,B中内容不变,所以打印结果为ABA,B

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

回复 使用道具 举报
doitforyou 发表于 2013-10-8 22:17
a,b都是引用,分别指向内存中的A、B
当你调用operate()方法时,开辟栈内存,
x,y也分别指向内存中的A、B ...

^_^  版主好速度。。。
回复 使用道具 举报
To 金牌黑马 2013-10-9 08:44:03
报纸
如果问题已解决,请将帖子改为提问结束,如果没有解决请楼主继续提问,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马