将相同的字符串变量引用都指向一个字符串对象.
3、CLR实现字符串留用的过程
CLR初始化时会创建一个内部哈希表.在这个表中,键(key)是字符串,而值(value)是对托管堆中的String对象的引用...(1)、Intern方法用于获取一个String,获得它的哈希码,并在哈希表中检查是否有相匹配的,如果存在完全相同的字符串,就返回对现有String对象的应用.如果不存在全完相同的字符串,就创建字符串的副本....将副本添加到内部哈希表中,返回对该副本的引用.如果应用程序不再保持对原始String对象的引用,这时垃圾回收器就会介入,将字符串的内存强行释放掉....String,并在内部哈西表中查找它.如果哈西表中有匹配的字符串,IsInterned方法就返回对这个留用字符串对象的应用.但如果没有,IsInterned就返回null,不会将字符串添加到哈希表中....String.Intern(str1);
Console.WriteLine(ReferenceEquals(str, str1));//输出:True
6、字符串池
编译源代码时,编译器必须处理每个字面值字符串,并在托管模块中的元数据中嵌入