当使用重载 *** 作符”=”给string对象赋值时,string的对象是引用类型,它保留在堆上,而不是堆栈上.因此,当把一个字符串赋给另一个字符串时,会得到对内存中同一个字符串的两个引用.例如,修改其中一个字符串,就会创建一个全新的string对象(注意,这个过程发生在”=”中),而另一个字符串没有改变.考虑下面的代码:
public class MyClass
{
public static void Main()
{
string str1 = "I am a number"
string str2 = str1
Console.WriteLine("str1 = "+str1)
Console.WriteLine("str2 = "+str2)
str1 = "I am another number"
Console.WriteLine("after str1 changed... str1 = "+str1)
Console.WriteLine("after str1 changed... str2 = "+str2)
Console.ReadLine()
}
}
Output :
str1 = I am a number
str2 = I am a number
after str1 changed...str1 = I am another number
after str1 changed...str2 = I am a number.
字符串的缺点
当需要对一个字符串变量重复赋值时,在内存中会产生大量的垃圾数据信息。
当重复赋值的频率很高时,执行的效率就会降低。
2.StringBuilder 简介
String,字符串;Builder,构建器;连起来是“字符串构建器”。
StringBuilder 是一个类。SB 类型的变量是引用类型。
StringBuilder 类型的“ 字符串变量 ”,一直 *** 作同一块内存空间, 不会产生垃圾数据 ,且执行效率远远高于 string 类型的字符串变量
StringBuilder 使用方法
1.创建 StringBuilder 类型的变量
StringBuilder sb = new StringBuilder() //创建一个对象。
注意:StringBuilder 依赖 System.Text 命名空间。
2.往 sb 中追加数据
sb.Append(i) //追加数据。
sb.ToString() //将 sb 转成字符串形式。
演示①:单个数据的追加;
演示②:使用 for 循环循环追加数据。
3.清空 sb 中的数据
sb.Clear() //将 sb 清空。
StringBuilder 效率测试
1.Stopwatch 类
Stopwatch,秒表计时器,用来记录程序运行的时间。
注意:Stopwatch 依赖 System.Diagnostics 命名空间。
2.创建 Stopwatch 类型对象
Stopwatch sw = new Stopwatch()
sw.Start() //计时器开始。
sw.Stop() //计时器结束。
sw.Elapsed //开始到结束之间的时长。
3.效率测试
使用 for 循环分别往 string 和 StringBuilder 中追加 5 万个信息,统计时长
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)