string 与StringBuilder的区别

C#中,string与StringBuilder都可以用于字符串的操作,那么它们之间有什么区别咧?疑问

对象可否被改变

String对象初始化后就是个常量,不可被改变,但StringBuilder对象可以。


内存分配问题:

String对象每次调用System.String 类中的一个方法时,都需在重新分配内存。而对

StringBuilder对象的操作则是在原来对象的内存空间上进行的。如果频繁操作的话,

则开销很大。此时,可用StringBuilder来构造对象。

下面引用一个例子:

	   (1)string aa="123456";
	(2)aa+="789";

	(3)StringBuilder text=new StringBuilder("123456",12);
	(4)text.Append("789");
	执行(1)时,系统先给aa分配内存,其地址指向"123456"的地址;然后执行(2),进行字符串的连接,这时是新分配一块内存块,最后aa的内存地址指向"123456789"的地址。
	而(3)(4)执行后的的结果和执行(1)(2)后的结果一样。但在执行(4)时,是在原来给text分配的内存的地址上进行的。StringBuilder对象是动态对象,可自动扩充其容量。

	安全问题:
	这里涉及到的就是数据共享的问题了。StringBuilder是线程不安全的,如果一个字符串在任何情况下只有一个线程访问它,则可以用StringBuilder。否则,如在多线程环境下的话,最好用Stringbuffer。

参考:
	http://zhidao.baidu.com/question/262913136.html
	http://www.cnblogs.com/yunfeng8967/articles/1093832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值