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对象。

猜你喜欢

转载自www.cnblogs.com/Echolh/p/11901412.html