StringBuilder作为一个快速的字符串操作工具而不仅仅是串联字符串。不管这是否是真的,我仍然想知道StringBuilder操作的结果以及它们产生的字符串。StringBuilder字符串是不可变的吗?
Reflector中的一个简短短语显示StringBuilder.ToString()并不总是返回一个副本,有时它似乎返回内部字符串的一个实例。它似乎也使用一些内部函数来操纵内部字符串。
那么,如果我这样做,我会得到什么?
string s = "Yo Ho Ho";
StringBuilder sb = new StringBuilder(s);
string newString = sb.ToString();
sb.Append(" and a bottle of rum.");
string newNewString = sb.ToString();
是newString和newNewString不同的字符串实例还是一样的?我试图通过反射器了解这一点,而我只是不完全了解所有事情。
这段代码如何?
StringBuilder sb = new StringBuilder("Foo\n");
StringReader sr = new StringReader(sb.ToString());
string s = sr.ReadLine();
sb.Append("Bar\n");
s = sr.ReadLine();
最后一条语句是否返回null或“Bar”?如果它返回一个或另一个,这是定义的还是未定义的行为?换句话说,我可以依靠它吗?
该文档在这个主题上非常简洁,我不愿意依赖于观察到的行为超过规范。
请注意,自问题被回答后,StringBuilder的实现已经发生了变化。 – mayu 2016-02-16 13:13:43