是String类型堆还是堆栈内存?

时间:2014-02-28 11:07:59

标签: .net string heap-memory primitive-types stack-memory

这里让我感到困惑,在.net字符串类型是类,但它的行为看起来像值! < \ B个所以字符串是按值(堆栈内存)还是按引用(堆内存)?

1 个答案:

答案 0 :(得分:4)

System.String是参考类型。类似于值的行为实际上是所谓的“immutablility”,这意味着一旦创建了对象,就不能改变它。您希望改变对象的所有操作(例如.ToUpper())都会创建一个新实例。

可变性是一个独立的主题,无论某事物是引用类型还是值类型。你可以拥有可变的值类型(虽然它们被认为是一个坏主意™)。


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

The Truth About Value Types中,Eric Lippert解释了CLR如何根据生命周期进行分配决策而不是其他任何事情。通常这些都是您不必担心的细节,但无论如何都是有趣的信息。