String 是一种引用类型,尽管它具有值类型的大部分特征,例如不可变和 == 重载以比较文本而不是确保它们引用相同的对象。
那为什么字符串不只是一个值类型呢?
最佳答案
字符串不是值类型,因为它们可能很大,需要存储在堆上。值类型(在 CLR 的所有实现中)存储在堆栈中。堆栈分配字符串会破坏各种各样的事情:堆栈对于 32 位只有 1MB,对于 64 位只有 4MB,你必须装箱每个字符串,导致复制惩罚,你不能实习字符串和内存使用会气球等等...
(编辑:添加了关于值类型存储作为实现细节的说明,这导致了这种情况,即我们有一个具有不从 System.ValueType 继承的值语义的类型。谢谢 Ben。)
关于c# - 在 C# 中,为什么 String 是一种行为类似于值类型的引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/636932/