为什么字符串是引用类型,即使它通常是原始数据类型,例如 int、float 或 double。
最佳答案
除了Dan贴出来的原因:
根据定义,值类型是将其值存储在自身中的类型,而不是引用其他地方的值。这就是为什么值类型被称为“值类型”而引用类型被称为“引用类型”的原因。所以你的问题实际上是“为什么一个字符串引用它的内容而不是简单地包含它的内容?”
这是因为值类型具有很好的属性,即给定值类型的每个实例在内存中的大小都相同。
那又怎样?为什么这是一个不错的属性?好吧,假设字符串是可以具有任意大小的值类型并考虑以下内容:
string[] mystrings = new string[3];
三个字符串数组的初始内容是什么?值类型没有“null”,所以唯一明智的做法是创建一个包含三个空字符串的数组。那将如何在内存中布局?想一想。你会怎么做?
现在假设你说
string[] mystrings = new string[3];
mystrings[1] = "hello";
现在数组中有“”、“hello”和“”。 “hello”在内存中的什么位置?无论如何,分配给 mystrings[1] 的插槽有多大?数组及其元素的内存必须某处。
这给 CLR 留下了以下选择:
- 每次更改其中一个元素时调整数组,复制整个元素,其大小可能为兆字节
- 不允许创建大小未知的值类型数组
- 不允许创建大小未知的值类型
CLR 团队选择了后者。 将字符串变成引用类型意味着您可以高效地创建它们的数组。
关于c# - 为什么字符串是引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3655984/