先看一个例子
string s1 = "orange";// outputs "orangered"
string s2 = "red";
s1 += s2;
System.Console.WriteLine(s1);
s1 = s1.Substring(2, 5);
System.Console.WriteLine(s1); // outputs "anger"
大家都知道字符串对象是“不可变的”,
对字符串进行操作的方法实际上返回的是新的字符串对象。
在前面的示例中,将 s1 和 s2 的内容连接起来以构成一个字符串时,包含"orange" 和 "red" 的两个字符串均保持不变。+= 运算符会创建一个包含组合内容的新字符串。
结果是:
s1 现在引用一个完全不同的字符串。只包含"orange" 的字符串仍然存在,但连接 s1 后将不再被引用。
大量的字符串相加的时候就会有很多像s1一样的不在被引用,从而造成资源的极大浪费. |