黑马程序员技术交流社区
标题:
关于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
public class Foo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
//sb.append(4):作用是将4添加到sb中,并返回sb,
StringBuffer s1 = sb.append(4);
//这句话的作用是s1指向sb,s1和sb实际上指向的是同一个对象
System.out.println(sb);
System.out.println(s1);
}
}
复制代码
作者:
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