String和StringBuilder那些事儿
前言
如今也毕业4个多月了,总觉得自己相比于科班出身的同学还是很缺乏理论基础的,所以打算此后开始写点东西,一是记录自己在学习的过程中遇到的问题,二是希望可以给一些新人一点帮助,因为我刚开始学习的时候也经常在csdn上找解决方案,csdn也确实帮我解决了很多问题,限于水平问题,下面说的地方可能并不是很对,大佬们轻喷。
1.System.String
在编程里面,System.String一直都是我们用的比较多的一个类型,String派生于Object,因此它属于引用类型数据,数据存放在堆上。String有一个特点,它是不可变的,即在创建之后,不再发生改变,我们通常使用“+”符号修改字符,实际上它返回的是一个新的对象。此外当我们尝试继承String类时,它会出现错误
因为String类型是密封类,它和CLR紧密联系,如果允许String类被继承,就能添加自己的字段,属性等,这样会破坏CLR对String的各种预设。
2.StringBuilder
构建字符串,我们还有另外一个选择,使用StringBuilder。相比于String,StringBuilder是一种可变的,即你改变它的内容后,它依旧是同一个对象,当然啦,在下面两种情况下StringBuilder会重新创建一个新的对象
- 动态创建字符串时,字符长度超过了设置的容量。
- 使用StringBuilder的**ToString()**方法。
3.String和StringBuilder如何选择
通常情况下,如果你要操作的字符并不多,那么String是个不错的选择,但是如果要多次对字符进行修改,拼接,则应该选择StringBuilder,毕竟大量地对String类型操作,会在堆上创建大量的对象,造成更加频繁的垃圾回收,会对系统的性能造成影响。