黑马程序员技术交流社区

标题: 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 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