谈一谈字符串的拼接
字符串是我们编程中最常使用的引用类型。String它是一个sealed类,存储在内存堆当中,每次更改将会产生一个新的string来存储,原来的就会被回收。
字符串拼接操作有多种方法,都能达到我们想要的拼接效果。但是它们的还是存在一定的差异,特别是性能方面。
1、使用"+"来拼接
string str ="Hello";//分配一块内存存储Hello str = str +" my friend!";//重新分配一块内存来存储 Hello my friend!
此方法可以看出拼接都会产生两次内存地址,随着拼接字符串的个数地址,分配内存地址的次数也递增,当几个简单的字符串通过该方式拼接时,其实我们还是感觉不到性能的影响,但是当字符串数量大时,你都会有感觉了,那样不仅仅造成内存的浪费,还直接影响性能。
string str1 = "Hello";//分配一块内存存储Hello string str2 = "my friend!";//分配一块内存存储my friend! string str3 = str1 + str3;//分配一块内存存储Hello my friend!
以上代码可以看出来 会产生 3个对象,这种方法消耗的内存更多。
对于少量的字符串拼接 "+" 还比较直观方便而且不会产生性能问题。但是大量拼接就不能使用。
2、使用StringBuilder来拼接
StringBuilder其实内部相当于是维护的一个字符数组,是一个可以动态增加自身数据长度,其默认长度为16,当存储的字符串超出其长度是,会自动扩容2倍长度。
可以看出来自动扩容是会损耗性能的,建议初始化时对其进行大小估计。
StringBuilder str = new StringBuilder(2); str.Append("Hello"); str.Append(" my friend!"); string result = str.ToString();
3、使用String.Format来拼接
其底层本质还是StringBuilder来实现。
public static String Format(IFormatProvider provider, String format, params Object[] args) { if (format == null || args == null) throw new ArgumentNullException((format==null)?"format":"args"); StringBuilder sb = new StringBuilder(format.Length + args.Length * 8); sb.AppendFormat(provider,format,args); return sb.ToString(); }
4、使用$进行拼接
"$"是在C#6.0出现的一个新特性,其作用相当于对String.Format()的简化,在使用String.Format来拼接时多起来的时候会眼花缭乱,$很好地解决这个痛点,让代码更加直观。
string str = "Hello"; str = $"{str} my friend!";
在性能方面 我们对比 “+” 和StringBuilder会发现 在少量字符串拼接是没有差异的。
在大量字符串拼接的时候StringBuilder的优势就很明显了。
在编程过程中要注意我们的代码对性能的影响。
标签:字符,string,C#,StringBuilder,拼接,str,字符串,Hello From: https://www.cnblogs.com/fskong/p/16940917.html