string是值类型还是引用类型?

时间:2014-09-02 23:31:20

标签: c# c#-4.0 c#-3.0

我对字符串引用类型或值类型有一些困惑,我有两个类型为string的变量,我将值赋给第一个变量然后将相同的变量分配给第二个变量,如果我在第一个变量值上更改了任何内容并且#39 ; t得到第二个变量的变化,因为第二个变量也指向第一个变量所在的相同位置?

        string string1 = "abc";

        string string2 = string1;

        string1 = "xyz";

这里string1保持值xyz而string2是abc

1 个答案:

答案 0 :(得分:4)

这是发生了什么:

string string1 = "abc";

string1是字符串“abc”的引用,它位于堆上的某个地方。

string string2 = string1;

string2是另一个引用,恰好指向内存中与string1相同的位置。使用赋值运算符时,该引用被复制到string2。您现在有两个指向内存中相同位置的变量。

string1 = "xyz";

string1现在指向新创建的字符串,其中包含“xyz”。 string2 仍然指向“abc”,仍然可以并且不会被垃圾回收。

无论如何,是的; String是引用类型。