【发布时间】:2013-09-02 14:58:41
【问题描述】:
考虑以下代码:
public static void Main()
{
string str1 = "abc";
string str2 = "abc";
if (str1 == str2)
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
Console.ReadLine();
}
输出为“真”。 string 是 .Net 中的引用类型,我正在比较两个不同的对象,但输出仍然是“True”。
- 是因为它在比较两个对象之前在内部调用了
ToString()方法吗? - 还是因为
string是不可变类型?两个完全不同具有相同值的string对象会指向堆上相同的内存位置吗?
string 比较是如何发生的?
内存分配是如何在堆上工作的?具有相同值的两个不同的string 对象会指向相同的内存位置,还是指向不同的位置?
【问题讨论】:
-
起初我觉得“没有足够的研究”投反对票,因为您很快就会发现
string是 .net 中引用类型的一个特例,但是看到了一些答案和 cmets你的问题已经产生了我实际上学到了一些东西,所以+1!