string 类型是c#中使用最频繁的类型,因此CLR用专门的方法来处理、优化string,使得string虽然你是引用类型,但在表现上被.NET优化为值类型。
变量存储的地址指向新对象
String s1 =“abc”;
s1 = “def”;
两个变量地址指向同一个对象
string s1 =“abc”;
string s2 = s1;
s2 = “def”;
S2地址重新指向新对象,S1地址指向的老对象保持不变
总结:
与其他引用类型的区别在于,特有的老对象不变性,其他引用类型重新赋值,会改变源数据对象值,地址依然指向源数据内存区,但是string重新赋值后,会重新开辟一块空间存储新对象值,而源数据内存区依然不销毁,保持老对象值不变,地址却会重新指向新对象值,老对象值内存区这时失去了指向他的地址指针,当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁。