黑马程序员技术交流社区

标题: 关于StringBuffer [打印本页]

作者: 关静刚    时间: 2013-12-1 18:54
标题: 关于StringBuffer
本帖最后由 关静刚 于 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呢?
作者: 摄影勾魂    时间: 2013-12-1 19:12
两个引用指向的是同一个对象。
作者: 25343215    时间: 2013-12-1 19:20
楼主可以这样理解:让sb添加4,然后在吧sb引向s1。
其实就是换了一个引用变量。
StringBuffer sb = new StringBuffer();
sb.append(4)
StringBuffer s1=sb;
System.out.println(sb);
System.out.println(s1);
作者: 李文帅    时间: 2013-12-1 19:23
楼主可以看一下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. }
复制代码

作者: Jim-剣◆﹏    时间: 2013-12-1 19:38
你的理解没有错
sb调用append方法,并把4放进去了,返回的是一个StringBuffer 对象(其实就是一个装了数字4的容器)
然后再把这个对象的引用赋给s1
那么此时我们先搞清楚存在什么,变量指向哪里
在执行完输出语句之前的代码的时候
存在一个装有数字4的容器
并且变量sb和s1都同时持有这个容器的引用,那么打印的结果就是4了
作者: 邓伟    时间: 2013-12-1 21:55
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);
}
作者: 关静刚    时间: 2013-12-2 15:41
谢谢大家啊!透彻了~
作者: 王家胜    时间: 2013-12-5 13:48
大家回答的是表象看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,所以是同一个对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2