String是引用类型。String是继承自System.Object类型的,而不是象Int32一样,继承自System.ValueType。但是String也是一个比较奇特的类型,一般而言,一个引用类型,构造的时候,是调用的IL指令:newobj。但是String有它自己的特殊的IL指令:ldstr。这说明,虽然String也是引用类型,但是,它和其他的引用类型还是有一些区别的。具体而言,CLR使用了字符串驻留技术,来提升String的性能。
简单的说,字符串驻留技术保证:内容相同的字符串,其在托管堆栈上的地址也是相同的,这样,就避免了大量的相同的String实例的存在 ,从而提高程序的性能,下面的代码可以验证这一点。
string s = "1112";
MessageBox.Show(object.ReferenceEquals(s,"1112").ToString());
上面的结果,是True。