A.Equals(B)和A==B的區別

Equals == 都是用於比較。spa

若是ab都是值類型,則a.Equals(b) a == b 結果相同,可是在引用類型是它們的行爲是不一樣的:對象

string a = new string(new char[] {'d', 'a', 'n', 'c', 'e'});
string b = new string(new char[] {'d', 'a', 'n', 'c', 'e'});
object c = a;
object d = b;

Console.WriteLine (a==b);
Console.WriteLine (a.Equals(b));
Console.WriteLine (c==d);
Console.WriteLine (c.Equals(d));
blog

輸出結果:ip

True
True
False
True
內存

值類型是存儲在內存中的堆棧(之後簡稱棧),而引用類型的變量在棧中僅僅是存儲引用類型變量的地址,而其自己則存儲在堆中。

"==" : 操做比較的是兩個變量的值是否相等,對於引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內容是否相同。

"equals" : 操做表示的兩個變量是不是對同一個對象的引用,即堆中的內容是否相同。

string是一種特殊的引用類型,使string對象用起來就像是值類型同樣,string類型的==操做其實是比較兩個字符串的值是否相同。

因此:
Console.WriteLine (a==b);            // 比較兩個字符串的值 - 返回true
Console.WriteLine (a.Equals(b));    // 比較兩個字符串的值 - 返回true
Console.WriteLine (c==d);           // 比較兩個對象的在堆中的地址是否相同 - 返回false
Console.WriteLine (c.Equals(d));   // 比較兩個對象的所指向的內容是否相同 - 返回true
相關文章
相關標籤/搜索