我对字符串引用类型或值类型有一些困惑,我有两个类型为string的变量,我将值赋给第一个变量然后将相同的变量分配给第二个变量,如果我在第一个变量值上更改了任何内容并且#39 ; t得到第二个变量的变化,因为第二个变量也指向第一个变量所在的相同位置?
string string1 = "abc";
string string2 = string1;
string1 = "xyz";
这里string1保持值xyz而string2是abc
答案 0 :(得分:4)
这是发生了什么:
string string1 = "abc";
string1
是字符串“abc”的引用,它位于堆上的某个地方。
string string2 = string1;
string2
是另一个引用,恰好指向内存中与string1
相同的位置。使用赋值运算符时,该引用被复制到string2
。您现在有两个指向内存中相同位置的变量。
string1 = "xyz";
string1
现在指向新创建的字符串,其中包含“xyz”。 string2
仍然指向“abc”,仍然可以并且不会被垃圾回收。
无论如何,是的; String是引用类型。