毫无疑问:String是引用类型。另一方面,String和int (Int32), Single (float)一样都是.NET的Primitive类型,CLR完全了解String对象的内部构造,并且有内建的用于String操作的指令(ldstr)。String的源代码不是用.NET语言/C#实现的,而是在CLR代码当中。在SSCLI的代码中Object.H里面可以找到下面的结构:
class StringObject : public Object
{
private:
DWORD m_ArrayLength;
DWORD m_StringLength;
WCHAR m_Characters[0];
...
};
另外,.NET程序仍然有办法打破String的Immutable——当然通常不建议这样做: