软件信息网 移动端开发 String和StringBuilder 的差别

String和StringBuilder 的差别

字符串

  • System.String类
  • System.Text.StringBuilder类

String

string是各位用的最多的类型之一,是一个特殊的引用类型,直接派生于Object,因此它的值储存在托管堆上。构造一个新字符串的时候,不需要用new。

 

using System;
class Program
{
    static void Main(string[] args)
    {
        string s = "This is right";//这是正确的
        Console.WriteLine(s);

        string b = new String("This is error");//这是错误的
        Console.WriteLine(b);
    }
}

 

它是”不可变的“。初始化字符串对象后,该字符串对象的长度、内容都是确定不变的了。这个时候,我们需要更改或者添加字符串,会做一个怎样的动作呢?假如会有这一段代码

using System;
class Program
{
    static void Main(string[] args)
    {
        string s = "I am ";
        s += "Sky";
        Console.WriteLine(s);//我叫Sky
    }
}

 

1、创建一个新的字符串对象b,运行库会为新对象b分配足够的内存,储存新内容“I am Sky”。

2、变量 s重新指向新对象b。

3、旧对象a没有被任何变量引用,等待垃圾回收。

 

String和StringBuilder 的差别插图

 

由于上面的特性,避免复制同一个字符串的多个对象,会利用CLR的字符串留用机制,减少内存的损耗。

什么是字符串留用,CLR初始化的时候会创建哈希表,每构建一个新字符串都会与哈希表匹配,查找是否有相同的字符串,如果匹配,就会返回这个已存在的旧对象,由新变量进行引用。否则,就会创建一个字符串副本添加到哈希表里,Key就是字符串,Value就是string对象在堆上的地址。

String和StringBuilder 的差别插图1String和StringBuilder 的差别插图2

 

String和StringBuilder 的差别插图3

由上面可见a和b的托管堆上地址是一样的。假如用new呢?经小平子补充,new出来的字符串是不会记录在哈希表的,因此,接下来的字符串与new出来字符串对象是不一样的。

String和StringBuilder 的差别插图4String和StringBuilder 的差别插图5

StringBuilder

因为string的”不可变“,导致多次修改字符串的时候会损耗性能,那么这个时候StringBuilder的作用就来了。StringBuilder和String比起来,功能较少,只有基本的属性和增删改的方法。

其实,StringBuilder是由Char数组构成的。构建新的StringBuilder时能设置容量大小,当添加字符串,超过已分配的数组大小时,就会创建一个新的数组,此时容量会翻倍,旧的数据就会等待垃圾回收。

StringBuilder多数方法都是返回同一个StringBuilder对象,那么这个时候就可以,几个操作一起完成。

using System;
using System.Text;
class Program
{
    static void Main(string[] args)
    {
        StringBuilder sb = new StringBuilder(10);
        string s = sb.AppendFormat("{0} {1}", "Skyer", "Chen").Remove(3,2).Replace(' ','-').ToString();
        Console.WriteLine(s);//显示结果 Sky-Chen
    }
}

 

写到这里快江郎才尽了,小弟知识浅薄,日后若有长进定会补上。第一次写博文格式排版有点烂,我发现在大牛们的格式特别漂亮。。起码标题很显眼,恳求各位哥指点指点。

作者: 软件定制开发

李铁牛,一直致力于企业客户软件定制开发,计算机专业毕业后,一直从事于互联网产品开发到现在。系统开发,系统源码:15889726201
上一篇
下一篇
联系我们

联系我们

15889726201

在线咨询: QQ交谈

邮箱: 187395037@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部