黑马程序员技术交流社区

标题: StringBuffer [打印本页]

作者: 胡威    时间: 2012-1-31 11:18
标题: StringBuffer
既然StringBuffer是字符串容器,为什么毕老师的视频里在输出StringBuffer里的内容时,总要调用toString()将内容转化成字符串呢?难道容器里装的东西不是字符串吗
作者: 张伟~    时间: 2012-1-31 12:00
StringBuffer sb=new StringBuffer("abc");
sb.append("123");
System.out.println(sb);
如果单纯只是显示出来的话,有上述方式一样也可以,输出结果为abc123.
调用toString()就是把它转换成String对象
作者: 彭嘉聪    时间: 2012-1-31 12:08
StringBuffer是一个容器,
对于一个字符串数组可以有这么多的操作,
而且还可以类似这样一个个添加,
其底层的实现可能用了链表。
就是说利用指针把一段段的字符串数组合在一起,
当然输出的时候把全部数据都放进一个String对象输出会容易处理。
其实你这样想就可以了,StringBuffer是一个对象,
String也是一个对象,变成String输出,才是你想要的结果。
作者: 陈时峰    时间: 2012-1-31 12:55
如果只是单纯的打印输出结果其实其实都是一样的
  1. StringBuffer sb = new StringBuffer();
  2.                 sb.append("a");
  3.                 sb.append("b");
  4.                 System.out.println(sb);
  5.                 System.out.println(sb.toString());
复制代码
其实打印StringBuffer对象就是调用其toString方法。
但是调用其toString方法就能获得String对象,这样就能用处理String对象的方法处理StringBuffer里面存的内容。
作者: 胡威    时间: 2012-1-31 15:25
那不用toString(),直接输出对象得到的是字符串吗?如果不是字符串又是神马?
作者: 张伟~    时间: 2012-1-31 15:48
从API上的方法看得出得出容器里装的都是字符串。
作者: 苏格拉底的弟子    时间: 2012-1-31 19:19
楼主,你要先清楚 String 和 StingBuffer 的区别

1,String专门定义不变字符串,而StingBuffer用来定义可变字符串,所以StingBuffer是个容器.
2,Sting a = “java” 直接赋值可以  但是StingBuffer  sb=“java” 肯定是不行的

你也可以用打印语句来检测他们,sop(sb) 打印出来的肯定是地址值  而sop(a) 这是打印字符串.
作者: 黄秋    时间: 2012-2-1 05:52
本帖最后由 黄秋 于 2012-2-1 05:54 编辑
苏格拉底的弟子 发表于 2012-1-31 19:19
楼主,你要先清楚 String 和 StingBuffer 的区别

1,String专门定义不变字符串,而StingBuffer用来定义可变 ...


sop(sb) 打印出来的肯定是地址值--- 这说法欠妥,print 会自动调用 toString方法,StringBuffer 的toString() 是返回里面内容的字符串;print 数组会输出一些难懂的怪字符,但这也是调用 toString方法,只是它的是 Object 的toString():

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:getClass().getName() + '@' + Integer.toHexString(hashCode())

原因:StringBuffer(String也是) 有自己的toString(),数组没有自己的。
作者: 周吉明    时间: 2012-2-1 09:23
toString() 方法可把一个逻辑值转换为字符串,并返回结果。
String专门定义不变字符串,而StingBuffer用来定义可变字符串。
两者在性能上有很大的区别,两者的性能差别原因在于:“String是不变的对象,对它进行修改(+操作)的本质为:new 一个 StringBuilder对象,然后调用StringBuilder类的append方法,最后调用toString方法,并销毁这个StringBuilder对象”




作者: 余海龙    时间: 2012-2-2 14:57
胡威 发表于 2012-1-31 15:25
那不用toString(),直接输出对象得到的是字符串吗?如果不是字符串又是神马? ...

得到的是字符串,输出语句在打印时虚拟机在底层调用了对象的toString方法。
所以System . out. println();  打印的都是字符串。




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