【发布时间】:2011-12-10 02:55:54
【问题描述】:
我注意到List<T> 的行为不同于其他简单对象,例如String。这个问题似乎是新手,但这真的让我很震惊,因为我认为List<T> 是简单的对象。
以下面的代码为例:
List<String> ls1 = new List<String>();
ls1.Add("a");
List<String> ls2 = ls1;
ls1.Add("b");
最后,ls1 将等于 {"a", "b"} 和 ls2。这与这段代码的行为确实不同:
String s1 = "a";
String s2 = s1;
s1 = "b";
其中s1 的末尾等于b,s2 等于a。
也就是说List<T>实际上是一个指针,对吧?
【问题讨论】:
-
它们被称为引用,而不是指针!
-
List<T>是一个对象,所以是的,它“就像一个指针”(我使用这个术语很宽松,因为托管代码中的对象不称为“指针”,它们被称为引用)。 -
List 和 String 在这方面是相同的。您得到不同结果的唯一原因是您在这些 sn-ps 中做了不同的事情。对比
List<String> ls1 = new List<String>(); ls1.Add("a"); ls2 = ls1; ls2 = new List<String>(); ls2.Add("b"),更接近。或者为了更清楚地说明这与您的字符串 sn-p 的相同之处,请替换集合初始值设定项:List<String> ls1 = new List<String> {"a"}; List<String> ls2 = ls1; ls2 = new List<String> {"b"};. -
这到底是怎么得到这么多赞成票的?这不是一个有趣的问题,只是对作业如何工作的误解。
-
@R0MANARMY:为我的问题辩护,我想说投票不是为了“有趣”的问题,而是为了“有用且清晰” 问题。我确实做了一些研究,但没有发现任何结论,因为我的 reference 术语有误。对不起,我的新手问题冒犯了你。 :)