[英]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.