字符串类型是存储在堆上还是堆栈上?

Zia*_*lem 5 .net string heap-memory primitive-types stack-memory

这是让我困惑的地方:在 .NET 中,string类型是一个类,但它的行为看起来像是一个值类型!

那么是string值类型(堆栈内存)还是引用类型(堆内存)?

Pau*_*ner 7

System.String是引用类型。类值行为实际上就是所谓的“不变性”,即对象一旦创建就无法更改。您希望改变对象的所有操作(例如.ToUpper())改为创建一个新实例。

可变性与某事物是引用类型还是值类型是一个单独的主题。您可以拥有可变值类型(尽管它们被认为是一个坏主意™)。


对于分配问题,简单的回答是引用类型通常分配在堆上,而值类型通常分配在堆栈上。

The Truth About Value Types 中,Eric Lippert 解释了 CLR 如何更多地基于生命周期做出分配决策,而不是其他任何事情。通常,这些是您不需要担心的细节,但不管怎样,这些都是有趣的信息。

  • @Oyeme 感谢您告诉我们 - 我找到了它的新家并更新了链接。 (2认同)