我遇到了“ CorruptedString”(解决方案)。这是本书中的以下程序代码:
var s = "Hello";
string.Intern(s);
unsafe
{
fixed (char* c = s)
for (int i = 0; i < s.Length; i++)
c[i] = 'a';
}
Console.WriteLine("Hello"); // Displays: "aaaaa"
为什么该程序显示“ aaaaa”?我了解此程序如下:
- 在CLR中实习生池储备“你好”(我的图像实习生池作为一组字符串)。
string.Intern(s)实际上不执行任何操作,因为CLR保留了“ Hello”字符串-它仅返回保留的“ Hello”字符串的地址(对象s具有相同的地址)- 该程序通过指针更改“ Hello”字符串的内容
- ??? 内部处理池中应没有Hello字符串,并且应该是错误的!但是没关系;该程序运行成功。
据我了解,实习生池,就像某种字符串到字符串的字典。也许我错过了什么?