1、== 運算符html
一、靜態相等符號,對應存在的!=,這個符號是一個能夠重載的二元操做符,能夠用於比較兩個對象是否相等。spa
二、它會根據須要自動進行必要的類型轉換,並根據兩個對象的值是否相等返回true或者false。orm
三、對於引用對象比較其引用(string引用類型除外,string是比較值)htm
四、對於值類型比較其值對象
五、某些內置的引用類型重載了==符號,例如string就重載==,使其比較的不是兩個字符串的引用,而是比較的兩個字符串字面量是否相等。繼承
2、Equals內存
一、用於比較兩個對象的引用是否相等。字符串
二、然而對於值類型,類型相同(不會進行類型自動轉換),而且數值相同(對於struct的每一個成員都必須相同),則Equals返回 true,不然返回false。get
三、對於引用類型,默認的行爲與ReferenceEquals的行爲相同,僅有兩個對象指向同一個Reference的時 候才返回true。原型
四、能夠根據須要對Equals進行重載
3、ReferenceEquals
一、Object的靜態方法,比較兩對象的引用是否相等,值類型和引用類型都是同樣。
二、不能在繼承類中重寫該方法。原型是:public static bool ReferenceEquals(object objA, object objB);FCL已經幫咱們實現。它就是比較引用指向的內存地址是否同樣。
三、對於2個值類型,ReferenceEquals永遠都爲false,由於使用ReferenceEquals(object a,object b)方法後值類型被從新裝箱爲新的引用類型實例,天然不會引用相等。
四、對於2個引用類型,ReferenceEquals則會比較它們是否指向同一地址。
參考資料:C#中==、Equals、ReferenceEquals的區別是什麼 http://www.studyofnet.com/news/1188.html