所有,
对于字符串string s = "abcd",是否string w = s.SubString(2)返回一个新分配的String对象,即string w = new String ("cd")内部或字符串文字?
对于StringBuilder,当附加字符串值并且需要增加StringBuilder的大小时,是否将所有内容复制到新的内存位置,或者只是将指向每个早期String值的指针重新分配给新位置?
String是不可变的,所以任何"改变"字符串的操作实际上都会返回一个new string.这包括SubString和所有其他操作String,包括那些不改变长度的操作(例如ToLower()或类似的操作).
StringBuilder内部包含一系列字符的链接列表.当需要增长时,会在列表末尾分配并插入新块,并在此处复制数据.换句话说,整个StringBuilder缓冲区不会复制到附加内容上,只会复制您要追加的数据.我对Framework 4的参考资料进行了双重检查.