C#中String 与StringBuilder的区别


     首先要明确一点, String是引用类型, String str=null 。 并且要知道String的值是不可变的。为什么String的值不可变?这个地方我在网上查了一下,暂时没有好的答案,后面找到之后再补充。

String的不可变性举例来说: String a ="123";   a +="45";     这个时候你可能会以为,a 的值明明变成了"123456".但是实际情况是这样的。第一次string a ="123";  堆上分配内存,存储值“123”,这里的 a 只是一个内存地址,指向堆上的"123",

当a+="45" 的时候,堆上又分配了一块内存,存放“12345”,这时候a 只是变成了指向"12345"地址的一个对象。所以a 的值每次发生变更,实际上是新增了一个值,之前的"“123”并没有消失。所以在做string拼接字符串的时候,特别是for循环中,使用a+=这种

的语法时,会照成大量的内存损耗。这时候就推荐使用StringBuilder对象了。StringBuilder拼接不会创建新的内存空间。

  StringBuilder是一个可以拼接字符串的类,初始化时可以指定stringBuilder对象一个长度,StringBuilder中有一个int类型的Capacity属性,用来指定stringBuilder中容器的长度。StringBuilder提供一个Append(string str)方法用于拼接字符串,并且可以自动检测字符串长度,当长度超过之前指定的最大长度时,会自动增加一个capacity的长度。所以在进行大量字符串拼接时,应该使用StringBuilder对象。

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM