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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹冬明 中级黑马   /  2014-4-15 02:17  /  702 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹冬明 于 2014-4-15 02:18 编辑
  1. public class TestDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 StringBuffer a = new StringBuffer("a");
  6.                 StringBuffer b = new StringBuffer("b");

  7.                 append(a,b);
  8.                
  9.                 System.out.println(a.toString()+","+b.toString());

  10.                 b = a;

  11.                 System.out.println(a.toString()+","+b.toString());
  12.         }

  13.         public static void append(StringBuffer a,StringBuffer b)
  14.         {
  15.                 a.append(b);
  16.                 b = a;
  17.         }
  18. }
复制代码
为什么跟我想的结果不一样呢,求解释!结果是:
ab,b
ab,ab
为什么呢


评分

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

查看全部评分

2 个回复

倒序浏览
你可以把  b = a; 看成局部变量。  所以 a.append 可以添加到a的缓冲区里。
回复 使用道具 举报
当执行到append方法中,b就会有了两个引用,一个是main中的,一个是append方法中的,两个b都指向同一内存地址,当执行b=a这句话时,其实这句的意思是将append方法中的b指向a所指向的内存空间,改变了append中的b的指向,与main方法中的b无关,所以main中的b还是"b",在main方法中的b=a,则是将b的地址改为a所指向的地址,由于此时a所指向的是“ab”,所以b也就是“ab”了

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马