c# - 在 C# 中,为什么 String 是一种行为类似于值类型的引用类型?

标签 c# string clr value-type reference-type

String 是一种引用类型,尽管它具有值类型的大部分特征,例如不可变和 == 重载以比较文本而不是确保它们引用相同的对象。

那为什么字符串不只是一个值类型呢?

最佳答案

字符串不是值类型,因为它们可能很大,需要存储在堆上。值类型(在 CLR 的所有实现中)存储在堆栈中。堆栈分配字符串会破坏各种各样的事情:堆栈对于 32 位只有 1MB,对于 64 位只有 4MB,你必须装箱每个字符串,导致复制惩罚,你不能实习字符串和内存使用会气球等等...

(编辑:添加了关于值类型存储作为实现细节的说明,这导致了这种情况,即我们有一个具有不从 System.ValueType 继承的值语义的类型。谢谢 Ben。)

关于c# - 在 C# 中,为什么 String 是一种行为类似于值类型的引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/636932/

相关文章:

.net - "Memory Pressure"是什么意思?

c# - 为什么Regex的Matches函数这么快?

c# - 保护我的 ASP .NET 代码以供演示?

c# - 我可以使用wpf鼠标事件替换触摸事件吗?

c++ - 需要用于字符串和 HTTP 流的良好 C++ 库

c++ - 计算幅度 <1 和幅度 >1 时的精度损失

c# - 检查字符串列表是否包含任何枚举字符串值

python - 从具有重复键 Python 的字符串创建一个 dict/json

.net - 在 .NET 中,对象引用的具体类型是什么?

c# - CLR 中的空引用检查