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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙飞 中级黑马   /  2012-7-3 14:17  /  1254 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 feigecal 于 2012-7-3 16:06 编辑
  1. class StringBufferTest
  2. {
  3. public static void main(String[] args)
  4. {
  5. StringBuffer sb=new StringBuffer();
  6. sb.append(33).append("sun").append(77);
  7. sop(sb);
  8. StringBuffer sa=sb;
  9. sop(sa.reverse());
  10. sop(sb);
  11. }
  12. public static void sop(Object obj)
  13. {
  14. System.out.println(obj);
  15. }

  16. }
  17. 为什么第一次打印sb后,把sb赋给一个新的容器,打印新容器的反转顺序后再打印sb顺序是反的呢?详细原理
复制代码

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 了解一下sa和sb在堆内存和栈内存的分布就明.

查看全部评分

3 个回复

倒序浏览
因为reverse()就将容器内内容用反转顺序取代了,就是把原来容器改了
回复 使用道具 举报

sb是指向对象的地址,把sb赋值给sa后,sa和sb指向了同一个对象,sa和sb都可以调用方法改变对象,当sa.reverse()改变了对象后,sb指向的就是改变后的对象

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 画图讲解,不错不错,赞一个!.

查看全部评分

回复 使用道具 举报
李伟 发表于 2012-7-3 15:19
sb是指向对象的地址,把sb赋值给sa后,sa和sb指向了同一个对象,sa和sb都可以调用方法改变对象,当sa.reve ...

一语道破啊,谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马