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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一只文字 中级黑马   /  2013-8-12 18:45  /  1891 人查看  /  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 收起 理由
薛鹏鹏 + 1

查看全部评分

4 个回复

倒序浏览
问题就在于StringBuffer不能用“=”来赋值,这样只能改变变量所指向的对象,就是把内存地址给另一个变量了,他俩指向同一个对象

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
楼上说的很对!我给你的代码测试了下,现在看运行结果应该很清楚了。
  1. public class Test3 {

  2.         public static void main(String[] args) {
  3.                 StringBuffer a = new StringBuffer("A");
  4.                 StringBuffer b = new StringBuffer("B");
  5. //                StringBuffer c = new StringBuffer("C");
  6.                 operate(a, b);
  7.                 System.out.println(a + "," + b);//这里的b还是原来的对象,所以值没有变。

  8.         }

  9.         static void operate(StringBuffer a, StringBuffer b) {
  10.                 System.out.println(a.hashCode()+".."+b.hashCode());
  11.                 a.append(b);
  12.                
  13.                 System.out.println(a.toString());
  14.                 System.out.println(b.toString());
  15.                 b = a;
  16.                 System.out.println(a.hashCode()+".."+b.hashCode());
  17.                 //这里得出的结果是把a的内存地址值赋给了b 在这个方法里以后  a,b都指向同一个对象a
  18.                 System.out.println(a.toString());
  19.                 System.out.println(b.toString());
  20.                 b.append("A");
  21.                 b.append("X");
  22.                 //所以这里得出的结果是一样的
  23.                 System.out.println(a.toString());
  24.                 System.out.println(b.toString());

  25.         }

  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
StringBuffer a = new StringBuffer("A");
        StringBuffer b = new StringBuffer ("B");
        operate (a,b);
分下下执行过程:
  x.append(y); //StringBuffer a -->"AB"
        y = x; //x的地址给了y,多个引用指向同一个对象:StringBuffer a-->"AB" StringBuffer b-->"AB"
        y.append("A");StringBuffer b-->ABA

个人分析,仅供参考。

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马