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

问题描述 投票:3回答:1

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

string是值类型(堆栈存储器)还是引用类型(堆存储器)?

.net string heap-memory primitive-types stack-memory
1个回答
4
投票

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

可变性是与引用类型或值类型无关的主题。您可以使用可变的值类型(尽管它们被认为是Bad Idea™)。


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

The Truth About Value Types中,埃里克·利珀特(Eric Lippert)解释了CLR如何根据生命周期做出分配决策,而不是其他任何事情。通常,这些是您无需担心的细节,但是无论如何,这都是有趣的信息。
© www.soinside.com 2019 - 2024. All rights reserved.