String 和 StringBuilder 的区别和使用环境?我先申明,我是看过书了,看了之后更糊涂了,这两个类型除了内存
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的这类型的使用方式呢?????
谁让它里面封装的方法多呢,呵呵
[解决办法]
[解决办法]stringbuilder 比string 方法少,但是速度快,能用stringbuilder就别用string
[解决办法]StringBuilder可以事先分配一段内存拼接字符串用;
而string拼接的时候需要重新分配内存;
字符串拼接频率大StringBuilder是首选,因为系统重新分配内存是很耗时间的。
[解决办法]在对可变字符串操作的时候用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();
这样的情况就用stringbuilder
[解决办法]
[解决办法]简单的说 StringBuilder 事先先分配内存,
如果 StringBuilder 没有先定义长度 则 默认分配的长度为 16;
当 StringBuilder 字符长度小于等于 16时,则StringBuilder 不重新分配内容
当 StringBuilder 字符长度大于16 小于 32的时候 ,StringBuilder 又重新分配 16的2倍 。
依次类推, StringBuilder.Capacity可以获取 StringBuilder 的真是的分配的内存大小
StringBuilder.Lenght 是获取 StringBuilder 字符串的 长度。
[解决办法]如果要对这个字符串做很多处理 比如加加减减什么的 就用builder
string 每赋值一次等于就重新new了一下吧
[解决办法]写法1:
string a="aa"+"bb";
写法2:
stringbuilder sb=new stringbuilder();
sb.append("aa");
sb.append("bb");
1.如果这些语句被执行的次数很少,没有在循环里出现,那就用写法1,简单明了。如果频繁地执行,比如出现在循环里,那可以用写法2.
2.StringBuilder的效率源于事先分配了内存,追加字符串时内存不够了,那还是需要再次分配内存,同样会降低效率,所以给StringBuilder指定的出示容量要合适,太小了,分配内存会频繁,太大了,浪费空间。StringBuilder重新分配内存时是按照上次的容量加倍进行分配的。
[解决办法]String是固定不变的,在进行字符串连接的时候是新建一个字符串,进行连接后,最后赋值,
如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源
StringBuilder是可变的,不用生成中间对象,拼接字符串比较多,或字符串的长度比较长时有较高的效率。
StringBuilder的内存空间不够也要扩容,如果分配的空间远远大于需要量,也很浪费
所以,初始化StringBuilder的时候最好根据需要设置容量,避免浪费
[解决办法]把string用作参数会害死人的,而stringBuilder不会.
[解决办法][解决办法]记得应该是BUILDER更优化一些。应该是string会经过一些内存上的计算,但是BUILDER不经过。