【问题标题】:In C#, does the same string in multiple containers pointing to the same location在 C# 中,多个容器中的相同字符串指向同一个位置
【发布时间】:2015-11-18 18:51:48
【问题描述】:

考虑下面的 C# 代码:

String a = "hello world";
List<String> ListA = new List<String>();
List<String> ListB = new List<String>();
ListA.Add(a);
ListB.Add(a);

我的问题是:两个列表中的两个字符串实际上是指向内存中的同一个位置吗?换句话说,同一个字符串有多个容器的额外内存只是关于引用(指针)而不是字符串的实际内存?

谢谢。

【问题讨论】:

标签: c# reference


【解决方案1】:

在您的代码中,a 是对字符串的引用。向两个列表添加相同的引用将引用相同的内存位置。

【讨论】:

    【解决方案2】:

    我的问题是:两个列表中的两个字符串实际上是指向内存中的同一个位置吗?

    是的,他们是。您添加了两次相同的字符串并且现在两个列表都引用了它的事实并没有改变存在所述字符串的单个实例的事实。

    另一个因素是您正在创建一个字符串文字,该文字将被实习到字符串池中。这将使相同字符串的任何其他创建重新使用已分配的字符串,而不是分配一个新的。

    来自string.Intern的文档:

    公共语言运行时通过维护一个称为实习池的表来节省字符串存储,该表包含对在程序中以编程方式声明或创建的每个唯一文字字符串的单个引用。因此,具有特定值的文字字符串的实例在系统中只存在一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多