📅  最后修改于: 2023-12-03 15:00:17.413000             🧑  作者: Mango
Intern(String str)
方法是 C# 中 String
类的一个实例方法,它将指定的字符串添加到应用程序域的字符串池中并返回它的引用。
string str1 = "abc";
string str2 = "abc";
string str3 = new string(new char[] { 'a', 'b', 'c' });
// 判断 str1 和 str2 是同一个实例
if (Object.ReferenceEquals(str1, str2))
{
Console.WriteLine("str1 和 str2 是同一个实例");
}
// 判断 str1 和 str3 不是同一个实例
if (!Object.ReferenceEquals(str1, str3))
{
Console.WriteLine("str1 和 str3 不是同一个实例");
}
// 获得 str3 在字符串池中的实例
string internedStr3 = String.Intern(str3);
// 判断 str1 和 internedStr3 是同一个实例
if (Object.ReferenceEquals(str1, internedStr3))
{
Console.WriteLine("str1 和 internedStr3 是同一个实例");
}
上述示例中,通过 Object.ReferenceEquals
方法判断字符串实例是否相同。首先,将字符串 "abc"
赋值给变量 str1
和 str2
,它们是同一个实例。接着,通过 new string
创建了一个新实例,虽然它的值与 str1
和 str2
相同,但它是一个新实例。最后,使用 String.Intern
方法获得字符串 "abc"
在字符串池中的实例,将其赋值给变量 internedStr3
,并使用 Object.ReferenceEquals
判断它是否与 str1
相同。由于这两个变量指向的都是字符串池中的同一个实例,所以它们是相同的。
字符串在 .NET 中是不可变的对象,如果我们多次创建相同的字符串,就会在内存中产生多个相同的对象。例如,当我们创建一个包含大量重复字符串的字符串数组时,会给垃圾回收器带来压力,从而影响应用程序的性能。而使用 Intern
方法可以将字符串存储在字符串池中,减少内存占用并提高性能。
下面是需要注意的几点:
ToLower()
方法会创建一个新的字符串实例,即使原字符串已经存在于字符串池中。Intern
方法。Intern
方法可以将字符串存储在字符串池中,减少内存占用并提高性能。但要注意字符串池的大小是有限的,需要合理使用和控制。