1)字符串的不可变性
当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一块空间存储新值
当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁
2)我们可以将字符串看作是char类型的一个只读数组
ToCharArray();将字符串转换为char数组
new string (char[] chs):能够将char数组转换为字符串
using System; namespace string类型 { class Program { static void Main(string[] args) { //string name = "张三"; //name = "孙权"; //Console.WriteLine(name); //Console.ReadKey(); //string s1 = "张三"; //string s2 = "张三"; //Console.ReadKey(); //可以讲string类型 看作是char类型的一个只读数组 string s = "abcdefg"; //s[0]=‘b‘;不能这样做,因为是只读的 //首先将字符串转换为char类型的数组 char[] chs=s.ToCharArray(); chs[0] = ‘b‘; //将字符数组转换为我们的字符串 s = new string(chs); //既然可以将string看作是char类型的只读数组,所以我可以通过下标去访问字符串中的某一个元素 Console.WriteLine(s[0]); Console.WriteLine(s); Console.ReadKey(); Console.ReadKey(); } } }
如下的程序:
using System; using System.Diagnostics; using System.Text; namespace _StringBuilder { class Program { static void Main(string[] args) { StringBuilder sb=new StringBuilder(); string str = null; //创建了一个计时器,用来记录程序运行的时间 //00:00:00.0422166 Stopwatch sw = new Stopwatch(); sw.Start();//开始计时 for (int i = 0; i < 10000;i++) { //str +=i; sb.Append(i);//Append 是追加的意思 就是+=的意思 } sw.Stop();//结束计时 Console.WriteLine(sb.ToString()); Console.WriteLine(sw.Elapsed); Console.ReadKey(); } } }
String一直在开辟新空间
而StringBuilder没有开新空间,所以在进行str+=i;这个计算的时候,String用的时间远远大于StringBuilder。