[英]Reference Type comparison in C#
我试图理解下面的问题。 我想知道为什么在下面的程序中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);
}
}
}
输出:
假
假
A和B是不同的对象。 它们属于同一类,但实例不同。 就像两个人都可以是人一样,但他们不是同一个人。
您正在比较两个类实例的引用。 由于A和B驻留在不同的存储位置,因此它们的引用不相等。 如果要测试类的相等性,则需要重写Equals()
方法。 http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx
在您的示例中,如果要测试A == C
您将看到它返回true
因为它们都指向内存中的同一位置。
在.NET中,类是引用类型 。 引用类型有两件事。 对象和对对象的引用 。
在你的情况, A
是对一个参考ObjectA
, B
是对一个参考ObjectB
。
当您定义Class1 C = A;
- 首先,创建两件事。 一个称为ObjectC的对象和对该对象的引用C。
- 然后,将
A
的引用复制到C
引用。 现在, A和C引用相同的对象 。
当对引用对象使用==
时,如果它们引用相同的对象,则返回true
,否则返回false
。
在您的情况下,这就是B == A
和C == B
返回false
,但是如果您尝试使用A == C
,则返回true
。
当您尝试比较参考时,输出正确。 这里的A和B是不同的对象,因此它们在比较时导致错误.A,B都位于不同的存储位置,因此它们的引用不相等。
引用类型将地址保存在内存中。 在您的情况下,A和B完全指向不同的地址。 但是,由于您将A分配给C,因此C指向与A相同的地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.