我想了解下面的问题。我想知道为什么B == A
和C == B
在以下程序中为假。
using System;
namespace Mk
{
public class Class1
{
public int i = 10;
}
class Program
{
static void Main(string[] args)
{
Class1 A = new Class1();
Class1 B = new Class1();
Class1 C = A;
Console.WriteLine(B == A);
Console.WriteLine(C == B);
}
}
}
输出:
假
假
答案 0 :(得分:2)
A和B是不同的对象。它们属于同一类,但不是同一个实例。就像两个人都可以成为人一样,但他们不是同一个人。
答案 1 :(得分:1)
您正在比较两个类实例的引用。由于A和B位于不同的存储位置,因此它们的引用不相等。如果要测试类相等性,则需要覆盖Equals()
方法。 http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx
在您的示例中,如果您要测试A == C
,您会看到它返回true
,因为它们都指向内存中的相同位置。
答案 2 :(得分:1)
在.NET中,类是引用类型。引用类型有两件事。 对象 以及 对象的引用 。
在您的情况下,A
是对ObjectA
的引用,B
是对ObjectB
的引用。
定义Class1 C = A;
- 首先,你创造了两件事。一个名为 ObjectC 的对象和一个名为 C 的对象的引用。
- 然后,您将
A
的引用复制为C
的引用。现在, A和C引用同一个对象。
当您对引用对象使用==
时,如果它们引用相同的objets,则返回true
,否则返回false
。
在您的情况下,这就是B == A
和C == B
返回false
的原因,但如果您尝试使用A == C
,则会返回true
。
答案 3 :(得分:0)
当您尝试比较参考时,输出是正确的。这里A和B是不同的对象,因此它们在比较时导致错误.A,B都在不同的存储位置,因此它们的引用不相等。
答案 4 :(得分:0)
引用类型将地址保存在内存中。在您的情况下,A和B完全指向不同的地址。但是,由于您将A分配给C,因此C指向与A相同的地址。