字符串

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。

posted @ 2021-06-24 20:51  静态类  阅读(52)  评论(0编辑  收藏  举报