以下是MSDN的摘录:
公共语言运行时通过维护一个称为实习池的表来保存字符串存储,该表包含对程序中以编程方式声明或创建的每个唯一文字字符串的单个引用。因此,具有特定值的文字字符串的实例在系统中只存在一次。
例如,如果您将相同的文字字符串分配给多个变量,则运行时会从实习池中检索对文字字符串的相同引用并将其分配给每个变量。
Intern 方法使用实习池来搜索等于 str 值的字符串。如果存在这样的字符串,则返回其在实习池中的引用。如果字符串不存在,则将对 str 的引用添加到实习池,然后返回该引用。.... 如果您试图减少应用程序分配的内存总量,请记住,字符串的实习有两个不需要的副作用。首先,在公共语言运行时 (CLR) 终止之前,分配给 interned String 对象的内存可能不会被释放。
那么,这是否意味着 CLR 为所有正在运行的 .net 应用程序保留一个实习生池?示例:如果程序 A 创建了一个字符串文字“Test”,并且如果另一个程序尝试创建另一个字符串文字“Test”,则使用相同的副本?同样的问题也适用于 JVM。