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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 关静刚 中级黑马   /  2013-12-1 18:54  /  1673 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 关静刚 于 2013-12-2 15:37 编辑

刚学到String类,求指点
public static void bufferMethodDemo() {
    StringBuffer sb = new StringBuffer();
    StringBuffer s1 = sb.append(4);
    System.out.println(sb);
    System.out.println(s1);
}
打印结果都是4,我的理解:sb调用append方法,把4丢进字符串缓冲区中后,
并用赋值给引用s1,返回的都是字符串缓冲区对象,也就是说返回的是容器,
弱弱的问下,sb之前是没有装东西的容器,返回的应该是没有装东西的容器,为什么打印出来4呢?

评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
枫儿 + 1 + 6 神马都是浮云

查看全部评分

7 个回复

倒序浏览
两个引用指向的是同一个对象。
回复 使用道具 举报
楼主可以这样理解:让sb添加4,然后在吧sb引向s1。
其实就是换了一个引用变量。
StringBuffer sb = new StringBuffer();
sb.append(4)
StringBuffer s1=sb;
System.out.println(sb);
System.out.println(s1);

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
楼主可以看一下JAVA API帮助文档
public StringBuffer append(int i)  append方法返回的是StirngBuffer,方法的作用是把i添加到该StringBuffer中,并返回该StringBuffer
  1. public class Foo {
  2.         public static void main(String[] args) {
  3.                 StringBuffer sb = new StringBuffer();
  4.                 //sb.append(4):作用是将4添加到sb中,并返回sb,
  5.             StringBuffer s1 = sb.append(4);
  6.           //这句话的作用是s1指向sb,s1和sb实际上指向的是同一个对象
  7.             System.out.println(sb);
  8.             System.out.println(s1);
  9.         }
  10. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 淡定

查看全部评分

回复 使用道具 举报 1 0
你的理解没有错
sb调用append方法,并把4放进去了,返回的是一个StringBuffer 对象(其实就是一个装了数字4的容器)
然后再把这个对象的引用赋给s1
那么此时我们先搞清楚存在什么,变量指向哪里
在执行完输出语句之前的代码的时候
存在一个装有数字4的容器
并且变量sb和s1都同时持有这个容器的引用,那么打印的结果就是4了
回复 使用道具 举报
public static void bufferMethodDemo() {
    StringBuffer sb = new StringBuffer();  //创造一个 类型为StringBuffer的变量.sb. 创造一个StringBuffer 对象. 此对象为空
    StringBuffer s1 = sb.append(4);  // sb.append(4) 是在sb这个容器里面添加一个字符串4,他返回的类型是StringBuffer()  其中文翻译过来,就是, 在sb容器里面先添加一个字符串,在拿s1指向sb添加后的地址.
    System.out.println(sb);
    System.out.println(s1);
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
谢谢大家啊!透彻了~
回复 使用道具 举报
大家回答的是表象看sun公司源代码,源代码面前了无秘密
StringBuffe的append方法(sun公司jdk源代码)
public AbstractStringBuilder append(StringBuffer sb)
{
        if (sb == null)
            return append("null");
        int len = sb.length();
        ensureCapacityInternal(count + len);
        sb.getChars(0, len, value, count);
        count += len;
       return this;
    }
可以看出sun公司返回的this,所以是同一个对象

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

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