为什么System.Int32是struct而System.String是类

从我开始进行c#编程的角度来看,这在我脑海中确实是一个问题。

为什么intstruct类型

在此处输入图像描述

stringclass类型

在此处输入图像描述

因为int具有固定长度,而string长度是可变的。 因此,编译器可以为int保留一个固定区域(主要在堆栈上),并且它必须为堆上的string s char数组维护一个灵活的缓冲区。

int是值类型,string是引用类型。 当您将值传递给方法或将它们分配给新变量时,值类型将按值传递(复制),依此类推。 引用类型仅复制引用。

对于诸如整数或浮点数之类的小对象,复制速度很快,但在某些时候复制操作的成本变得昂贵,因此引用比始终复制值更可取。

尽管string也是不可变的,就像大多数值类型一样(是否存在任何可变值类型?)因为字符串可能非常大,所以它们不适合传递值。