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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 盖保宁 黑马帝   /  2011-9-26 09:18  /  2492 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

方老师说StringBuffer是一个容器,可以存储删除获取修改。问大家感到有碰到必须使用stringBuffer的地方吗
用String除了不能翻转基本功能够用了,那StringBuffer一般是在什么情况下建议用呢

评分

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

查看全部评分

7 个回复

倒序浏览
黑马网友  发表于 2011-9-26 09:22:32
沙发
String再追加字符串的时候效率没有StringBuffer好,因为String追加的时候要重新创建一个String对象,而StringBuffer则是在原先开辟的内存中直接追加,又不重新创建对象

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 09:23:45
藤椅
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。 append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
最后的总结:字符串操作的时候应该使用指定容量的StringBuffer!

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 09:28:06
板凳
谢谢何德虎的提醒:.StringBuffer线程安全的可变字符序列
回复 使用道具 举报
黑马网友  发表于 2011-9-26 14:08:38
报纸
字符串内容较长的时候,特别是这个字符串是动态拼接的时候,用String可能发生内存不够的错误,这种情况必须用stringbuffer
回复 使用道具 举报
当你觉得用string不对劲的时候,考虑用它或者stringbuilder,不对劲就是经常用+操作符或者字符串太长

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 20:44:17
7#
String类型一旦赋值就不能改变了,但是我们在程序中有时会出现这样的语句[code]String s="abc"; s=s+"d";[/code],这是因为在程序的运行过程中,String 类型的数据先转化成StringBuffer类型,执行后,形成了最终的字符串后,再转换为String 类型。

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-26 23:20:06
8#

回复 楼主 的帖子

String是对象不是原始类型,为不可变对象,一旦被建立 ,就不能修改它的值。对于已经存在的String对象的修改都是重新建立一个新的对象。然后把新的值保存进去。
StringBuffer是一个可变对象,当对他执行修改的时候不会像String那样重新建立对象,它只能通过构造函数来建立。
很重要的一点String比StringBuffer的效率要低很多!

评分

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

查看全部评分

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