集合是否可变?

Vib*_*aul -1 c# collections

在下面的例子中,所做的更改List B直接反映在int中List A.

   List<string> A = new List<string>();
   A.Add("1");
   List<string> B = new List<string>();
   B = A;
   foreach (string value in B)
   {
       Console.WriteLine("B= " + value);
   }
   B.Add("2");
   foreach (string value in A)
   {
       Console.WriteLine("A= " + value);
   }
Run Code Online (Sandbox Code Playgroud)

输出是

B = 1

A = 1

A = 2

即使我使用了输出也是相同的Arraylist.

如果是字符串,则行为不然!

String s1 = "abc";
String s2 = s1;
s2 += "TEST";
Console.WriteLine("S1=" + s1 + "    S2=" + s2);
Run Code Online (Sandbox Code Playgroud)

输出是

S1 = abc S2 = abcTEST

was*_*atz 11

是.

收藏品是可变的.字符串是不可变的.所以在开始时A并且B是对两个不同列表的引用.如果B = A同时执行这两个操作BA在内存中引用相同的列表,则更改为另一个列表.

然而,字符串是不可变的,因此+=操作符实际上返回一个新字符串.所以在开始时你实际上在这里有相同的情况,s1s2指向内存中相同的字符串,但s2 += "TEST"会导致分配一个新的字符串,并将改为对该字符串s2的引用.