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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡威 黑马帝   /  2012-1-31 11:18  /  2931 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

既然StringBuffer是字符串容器,为什么毕老师的视频里在输出StringBuffer里的内容时,总要调用toString()将内容转化成字符串呢?难道容器里装的东西不是字符串吗

9 个回复

倒序浏览
StringBuffer sb=new StringBuffer("abc");
sb.append("123");
System.out.println(sb);
如果单纯只是显示出来的话,有上述方式一样也可以,输出结果为abc123.
调用toString()就是把它转换成String对象

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
StringBuffer是一个容器,
对于一个字符串数组可以有这么多的操作,
而且还可以类似这样一个个添加,
其底层的实现可能用了链表。
就是说利用指针把一段段的字符串数组合在一起,
当然输出的时候把全部数据都放进一个String对象输出会容易处理。
其实你这样想就可以了,StringBuffer是一个对象,
String也是一个对象,变成String输出,才是你想要的结果。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
如果只是单纯的打印输出结果其实其实都是一样的
  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里面存的内容。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
那不用toString(),直接输出对象得到的是字符串吗?如果不是字符串又是神马?
回复 使用道具 举报
从API上的方法看得出得出容器里装的都是字符串。
回复 使用道具 举报
楼主,你要先清楚 String 和 StingBuffer 的区别

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

你也可以用打印语句来检测他们,sop(sb) 打印出来的肯定是地址值  而sop(a) 这是打印字符串.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黄秋 黑马帝 2012-2-1 05:52:16
8#
本帖最后由 黄秋 于 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(),数组没有自己的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
toString() 方法可把一个逻辑值转换为字符串,并返回结果。
String专门定义不变字符串,而StingBuffer用来定义可变字符串。
两者在性能上有很大的区别,两者的性能差别原因在于:“String是不变的对象,对它进行修改(+操作)的本质为:new 一个 StringBuilder对象,然后调用StringBuilder类的append方法,最后调用toString方法,并销毁这个StringBuilder对象”



评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
胡威 发表于 2012-1-31 15:25
那不用toString(),直接输出对象得到的是字符串吗?如果不是字符串又是神马? ...

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题加分!

查看全部评分

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