字符串是值类型还是引用类型?

Nit*_*wal -1 c# c#-3.0 c#-4.0

我对字符串引用类型或值类型有些困惑,我有两个字符串类型的变量,我将值分配给第一个变量,然后将相同的变量分配给第二个变量,如果我更改第一个变量值的任何内容,则不会更改第二个变量,因为第二个变量也指向第一个变量的相同位置?

        string string1 = "abc";

        string string2 = string1;

        string1 = "xyz";
Run Code Online (Sandbox Code Playgroud)

这里 string1 持有值 xyz 和 string2 是 abc

Mik*_*sen 5

这是发生了什么:

string string1 = "abc";
Run Code Online (Sandbox Code Playgroud)

string1是对位于堆上某处的字符串“abc”的引用

string string2 = string1;
Run Code Online (Sandbox Code Playgroud)

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

string1 = "xyz";
Run Code Online (Sandbox Code Playgroud)

string1现在指向一个新创建的包含“xyz”的字符串。 string2 仍然指向“abc”,它仍然可以访问并且不会被垃圾收集。

无论如何,是的;字符串是一种引用类型。

  • @MikeChristensen:.NET 实现也是免费提供的。http://referencesource.microsoft.com/#mscorlib/system/text/stringbuilder.cs#46 (2认同)