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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 资建文 中级黑马   /  2012-8-23 17:04  /  3066 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

string和stringbuilder的区别是什么?

评分

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

查看全部评分

6 个回复

倒序浏览
1. String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会产生一个新的实例;
2. 在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder ,不要使用 String.
回复 使用道具 举报
String创建后的字符串是不可改变的,stringbuilder可以改变创建后的内容

评分

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

查看全部评分

回复 使用道具 举报
详细点说:可变与不可变,不变是一种设计模式,意思是说当此对象创建后,你不能改变它的内部状态,对String,你创建了一个String,你能通过set方法改变它的长度length吗。StringBuilder可以。
StringBuilder类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
基本来说都是在性能上都是 StringBuilder > StringBuffer > String 的了。

评分

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

查看全部评分

回复 使用道具 举报
String运算时会产生一个String实例,原理就是将原来的字符串和新的字符串都写入内存,然后再在内存中删除掉原有的字符串,比较耗时,小数据可以使用。
而StringBulider中,存在Append方法,与String不同,他则是在原有的字符串上进行修改,比较直接,对于大量的添加,或其他操作时,要比String省时得多

评分

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

查看全部评分

回复 使用道具 举报
String是不可变的,固定的。
StringBuilder这两个是带缓冲的容器,长度是可以变化的。
String s = "hello";
s = s + "world";
这里会有三个字符串的对象。

如果是用StringBuilder
StringBuffer buffer = new StringBuffer();
buffer.append("hello").append("world");
这里有一个字符串缓冲区对象
回复 使用道具 举报
多看一点就学到一点,新手多关照
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马