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


Equals == 都是用於比較。

如果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));

輸出結果:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM