这里让我感到困惑,在.net字符串类型是类,但它的行为看起来像值! < \ B个所以字符串是按值(堆栈内存)还是按引用(堆内存)?
答案 0 :(得分:4)
System.String
是参考类型。类似于值的行为实际上是所谓的“immutablility”,这意味着一旦创建了对象,就不能改变它。您希望改变对象的所有操作(例如.ToUpper()
)都会创建一个新实例。
可变性是一个独立的主题,无论某事物是引用类型还是值类型。你可以拥有可变的值类型(虽然它们被认为是一个坏主意™)。
对于分配问题,简单的答案是引用类型通常在堆上分配,值类型通常在堆栈上分配。
在The Truth About Value Types中,Eric Lippert解释了CLR如何根据生命周期进行分配决策而不是其他任何事情。通常这些都是您不必担心的细节,但无论如何都是有趣的信息。