为什么System.Int32是struct而System.String是类
从我开始进行c#
编程的角度来看,这在我脑海中确实是一个问题。
为什么int
是struct
类型
而string
是class
类型
因为int
具有固定长度,而string
长度是可变的。 因此,编译器可以为int
保留一个固定区域(主要在堆栈上),并且它必须为堆上的string
s char数组维护一个灵活的缓冲区。
int是值类型,string是引用类型。 当您将值传递给方法或将它们分配给新变量时,值类型将按值传递(复制),依此类推。 引用类型仅复制引用。
对于诸如整数或浮点数之类的小对象,复制速度很快,但在某些时候复制操作的成本变得昂贵,因此引用比始终复制值更可取。
尽管string也是不可变的,就像大多数值类型一样(是否存在任何可变值类型?)因为字符串可能非常大,所以它们不适合传递值。