将相同的字符串变量引用都指向一个字符串对象.
3、CLR实现字符串留用的过程
CLR初始化时会创建一个内部哈希表.在这个表中,键(key)是字符串,而值(value)是对托管堆中的String对象的引用....将副本添加到内部哈希表中,返回对该副本的引用.如果应用程序不再保持对原始String对象的引用,这时垃圾回收器就会介入,将字符串的内存强行释放掉....注:垃圾回收器不会释放内部哈希表引用的字符串,因为哈希表正在容纳对它们的引用.除非卸载AppDomain或进程终止,否则其内部哈希表应用的String对象不能被释放.
(2)IsInterned方法也获取一个...String,并在内部哈西表中查找它.如果哈西表中有匹配的字符串,IsInterned方法就返回对这个留用字符串对象的应用.但如果没有,IsInterned就返回null,不会将字符串添加到哈希表中....引用改字符串的所有代码都被修改成引用元数据中的同一个字符串.编译器将单个字符串的多个实例合并成一个实例,能显著减少模块的大小.C/C++编译器多年来一直采用这个技术,这个技术被称为"字符串池".