日期:2014-05-18  浏览次数:20890 次

String 和 StringBuilder 的区别和使用环境?
我先申明,我是看过书了,看了之后更糊涂了,这两个类型除了内存使用方式不同外还有什么区别,在书上及其它介绍上来看StringBuilder比String要优秀,那么为什么还要有String的这类型的使用方式呢,还有既然有了这两种方式,那么在什么情况下使用那种类型比较合理呢,优点又在哪里呢

------解决方案--------------------
String是固定不变的,在进行字符串连接的时候是新建一个字符串,进行连接后,最后赋值,
如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源

StringBuilder是可变的,不用生成中间对象,拼接字符串比较多,或字符串的长度比较长时有较高的效率。
StringBuilder的内存空间不够也要扩容,如果分配的空间远远大于需要量,也很浪费
所以,初始化StringBuilder的时候最好根据需要设置容量,避免浪费


------解决方案--------------------
既然看了书那就应该明白 ,
exp:
string a="aa"+"bb";
stringbuilder sb=new stringbuilder();
sb.append("aa");
sb.append("bb");
这两种在内存操作是不同的,第一种内存中有三个string(分别为"aa","bb","aabb") ,第二种只有一个("aabb"),所以性能是不同的
------解决方案--------------------
简单点说一个用在字符串表示 一个用在操作操作(拼接,插入,删除)
------解决方案--------------------
100分一定得顶!
------解决方案--------------------
一个稳妥的方法是,处处用string,而一旦遇到string + string或者string += string的情况,考虑用StringBuilder来优化。不过这个是阅读代码时的检查了。最可靠的方式还是profiler分析报告了。
------解决方案--------------------
StringBuilder的出现完全是仿照Java的StringBuffer类搞来的,和Java的StringBuilder不是一回事情。
而Java的String和C#的如出一辙,而StringBuffer是为了操作字符串,提高效率,减少不必要的对象而产生的。

就和1楼和2楼的哥们说得一样,你说用于什么环境?

------解决方案--------------------
简单理解:
操作(拼接,插入,删除)频繁的 用StringBuilder,
那么为什么还要有String的这类型的使用方式呢?????
谁让它里面封装的方法多呢,呵呵
------解决方案--------------------
探讨
既然看了书那就应该明白 ,
exp:
string a="aa"+"bb";
stringbuilder sb=new stringbuilder();
sb.append("aa");
sb.append("bb");
这两种在内存操作是不同的,第一种内存中有三个string(分别为"aa","bb","aabb") ,第二种只有一个("aabb"),所以性能是不同的

------解决方案--------------------
stringbuilder 比string 方法少,但是速度快,能用stringbuilder就别用string
------解决方案--------------------
StringBuilder可以事先分配一段内存拼接字符串用;
而string拼接的时候需要重新分配内存;
字符串拼接频率大StringBuilder是首选,因为系统重新分配内存是很耗时间的。
------解决方案--------------------
在对可变字符串操作的时候用StringBuilder比string性能好


------解决方案--------------------
探讨
引用:
stringbuilder 比string 方法少,但是速度快,能用stringbuilder就别用string


有只用StringBuilder,而不用String的地方嘛?


------解决方案--------------------
真实学习了啊,其实基础知识才是最重要的
------解决方案--------------------
String 对象是不可改变的。每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。而 StringBuilder 则不会。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。


------解决方案--------------------
StringBuilder表示可变字符串 
String表示不可变字符串 

比如你在编程时,声明一个字符串变量,string aa="";
又比如,你在编程时,拼凑SQl语句:
如:
stringBuilder strbu=new stringbulider;
strbu.append(" select * from table1");
strbu.append(" where 1=1");
strbu.append(" and 2=2");
return strbu.tostring();