MSDN建议“公共语言运行时通过维护一个名为intern pool的表来保存字符串存储,该表包含对在程序中以编程方式声明或创建的每个唯一文字字符串的单个引用。因此,具有特定值的文字字符串实例仅在系统中存在一次。“
为什么在下面的示例中,此String.IsInterned
调用不会返回对常量的引用?
如果我取消注释第一个Console.WriteLine
方法调用,则返回引用。另外,如果我没有将测试变量声明为常量,则返回引用。为什么常数不被实习?
Module InternTest
Private Const test As String = "wwwww"
'Private test As String = "wwwww"
Sub Main()
'Console.WriteLine(test)
Console.WriteLine("interned = " & String.IsInterned(createString()))
Console.ReadLine()
End Sub
Function createString() As String
Dim sb As New Text.StringBuilder
sb.Append("w")
sb.Append("w")
sb.Append("w")
sb.Append("w")
sb.Append("w")
Return sb.ToString
End Function
End Module