在下面的例子中,所做的更改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同时执行这两个操作B并A在内存中引用相同的列表,则更改为另一个列表.
然而,字符串是不可变的,因此+=操作符实际上返回一个新字符串.所以在开始时你实际上在这里有相同的情况,s1并s2指向内存中相同的字符串,但s2 += "TEST"会导致分配一个新的字符串,并将改为对该字符串s2的引用.