浅谈string和StringBuilder(一)

虽然大家对string和StringBuilder已经非常熟悉不过了,但是相信还是有好多人不是很懂他们的区别。看过好多大牛们写的这方面的博客,受益匪浅,下面我也分享一下我的认识。

简单说明

  1.string是不可变的,一旦创建,就不可以修改。有人说:怎么就不可以修改了,string strTest = "hbccdf";  strTest = "缘生梦"; 这不就修改了strTest的值吗

    我的意思是,一旦在内存中创建了“hbccdf”,就不可通过是strTest[n] = "m"; 这种方式来修改字符的值,而 strTest="缘生梦"; 也并不是把 "hbccdf" 字符串修改为 “缘生梦”,而是,在内存中又创建了一个字符串“缘生梦”,然后将这个新的字符串的地址引用赋给strTest。

  2.StringBuilder是可变的,创建后可以随时修改,最终通过ToString返回一个字符串。与string的区别就是,StringBuilder sb = new StringBuilder(); sb.Append("hbccdf"); sb[0]="缘"; 那么通过sb.ToString(); 返回的字符串是什么呢? -- “缘bccdf”  ,这是与string很大的不同。

  

  那么为什么字符串通过索引不可以修改,而StringBuilder却可以呢。我们通过类的定义来分析一下:

    string的索引定义:public char this[int index] { [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical] get; }  ,由此可见,只有一个get,没有set,所以strTest[0] = "缘"; 在编译的时候就会报错。

    StringBuilder的索引定义:public char this[int index] { get; set; } ,get,set齐全,所以修改没问题。

(二)引用类型string的值类型特点

  下面来看一个小例子

 

string text = “White”;
string temp = text;
temp += “Black”;
Console.WriteLine(text);
Console.ReadKey(); 

 

  想必大家都知道,最后输出的会是:White 

  那么既然string是引用类型,那么temp += “Black”; temp的值会改变,那么text也应该会受到影响,然后最后输出“WhiteBlack”。这到底是为什么呢?

  +=操作究竟做了什么事情呢:

    += 操作是 根据两个字符串来创建一个新的字符串对象,然后将这个新的字符串对象的引用赋给 temp。这个操作并没有影响之前的 text,所以输出 White。

 

转载于:https://www.cnblogs.com/hbccdf/archive/2012/06/23/2559115.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值