深入讲解string和StringBuilder的区别

  
  
  

 都说string类型是引用类型,但是我一直想不通为何当我声明两个变量 string a1,a2; a1=“100”; a2=a1; a1=“200”当我输出a2的值时并没有根据“引用类型”的赋值是赋值内存地址的说法而改变a2的值,这令我百思不得其解,当我看到一篇文章中所说的如下:

  
  
static void Main( string [] args) {   string str = " string "
  Change(str); 
  Console.WriteLine(str); 
static void Change( string str) { 
  str = " Changed "
}
复制代码

方法传递的参数是原内容的拷贝,其过程如果用图可表示为:

 

  语句str=”Changed”之前

  

  语句str=”Changed”之后

  

string虽然是个引用类型但是他是个特殊的引用类型,当a1的值赋值给a2时并没有引用内容地址而是给a2新增了一个内存空间,所以改变a1的值时a2并没有发生改变。


String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

  
  
namespace TCP { public class Program {
     public class User       {           private string _name;           private string _age;           public User(string name, string age)           {               _name = name;               _age = age;           }           public string name           {               get { return _name; }               set { _name = value; }           }           public string age           {               get { return _age; }               set { _age = value; }           }       }
   }
   public static void editUser(User user, StringBuilder str,string code)    {      code = "VB.NET";      str = str.Remove(01);      str.Append("E");      user.name = "LEE"; user.age = "10"; }
  
static void Main(string[] args)    {      string code = "C#";    User user = new User("Li","23");      StringBuilder str = new StringBuilder();                  str.Append("A");                  editUser(user, str,code);      Console.WriteLine(code);      Console.WriteLine(str);      Console.WriteLine(user.name);      Console.WriteLine(user.age);      Console.ReadLine();    }
}
复制代码

 

上面代码输如下:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值