字符串与StringBuilder在c#中有什么区别

  介绍

本篇文章给大家分享的是有关字符串与StringBuilder在c#中有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>简介区别

字符串的缺点是每次字符串变量的内容发生了改变时,都必须重新分配内存。你想想,如果创建一个迭代100000次的循环,每次迭代都将一个字符连接到字符串,这样内存中就会有100000个字符串,每个字符串仅仅与前一个字符串相伴只是有一个字符不同,性能影响是很大的。

StringBuilder通过分配一个缓存,就是一个工作区来解决这些问题,在工作区中队字符串应用StringBuilder类的相关方法。包括添加,删除,移除,插入和替换字符等等。执行完之后,将调用ToString方法把工作区中的内容转换为一个字符串,方便赋给一个字符串变量。这样StringBuilder会提升一些性能。

<强>字符串类型对象的特点:

1。它是引用类型,在堆上分配内存
2。运算时会产生一个新的实例
3。字符串对象一旦生成不可改变(不可变的)
4。定义相等运算符(==和!=)是为了比较字符串对象的值(而不是引用)

在。网中字符串是不可改变对象,一旦创建了一个字符串对象并给它赋值,它就不可能再改变,也就是你不可能改变一个字符串的值。这句活初听起来似乎有些不可思议,大家也许马上会想到字符串连接操作,我们不也可以改变字符串吗?看下面的这段代码:

public  static  void  Main (String [], args)   {   ,,,string  s =癮bc";   ,,,Console.WriteLine (s),,//输出,abc    ,,,s =, s  +“def",,   ,,,Console.WriteLine (s),,//def    ,,,Console.Read (),,   }

看起来我们似乎已经把s的值从“abc"改为了“abcdef",实际上并没有改变.string s=癮bc",是创建了一个字符串对象它的值是“abc",年代指向了它在内存中的地址,s +=癲ef",是创建了一个新字符串的对象它的值是“abcdef",年代指向了新的内存地址。这时在堆中其实存在着两个字符串对象,尽管我们只引用了他们中的一个,但字符串“abc"仍然在内存中驻留。

前面说过字符串是引用类型,如果我们创建很多个相同值的字符串对象,它在内存中的指向地址应该是一样的。也就是说,当我们创建了字符串对象,它的值是“abc",当我们再创建一个值为“abc"的字符串对象str时它不会再去分配一块内存空间,而是直接指向了年代在内存中的地址。这样可以确保内存的有效利用。看下面的代码:

,, public  static  void  Main (String [], args)   ,,,{   ,,,,,string  s =,“abc";   ,,,,,Console.WriteLine (s),,//输出,abc ,   ,,,,,添加(s);,,//调用下面方法,   ,,,,,Console.WriteLine (s),,//输出,def   ,,,,,Console.Read ();   ,,,}   ,,,public  static  void 添加(string  str)   ,,,{   ,,,,,str =,“def";   ,,,}   ,,,//改变方法的参数,,使用ref关键字,,   ,,,public  static  void  Main (string [], args)   ,,,{   ,,,,,string  s =,“abc";   ,,,,,Console.WriteLine (s),,//,输出,abc ,   ,,,,,添加(ref  s);   ,,,,,Console.WriteLine(年代);//六边形abcdef   ,,,,,Console.Read ();   ,,,}   ,,,public  static  void 添加(ref  string  str), {   ,,,,,str =,“def";   ,,,}

<强>设置StringBuilder容量

StringBuilder对象为动态字符串,可以对其设置好的字符数量进行扩展。另外,还可以设置一个最大长度,这个最大长度称为该StringBuilder对象的容量(容量)。

为StringBuilder设置容量的意义在于,当修改StringBuilder字符串时,当其实际字符长度(即字符串已有的字符数量)未达到其容量之前,StringBuilder不会重新分配空间;当达到容量时,StringBuilder会在原空间的基础之上,自动不进行设置,StringBuilder默认初始分配16个字符长度。有两种方式来设置一个StringBuilder对象的容量。

1。使用构造函数

, StringBuilder构造函数可以接受容量参数,例如,下面声明一个StringBuilder对象sb2,并设置其容量为100。

//使用构造函数   ,StringBuilder  Mysb1=new  StringBuilder (“Hello", 100);

2。使用能力读/写属性

,能力属性指定StringBuilder对象的容量,例如下面语句首先一个StringBuilder对象sb3,然后利用能力属性设置其容量为100 .

字符串与StringBuilder在c#中有什么区别