Equals、==和RefrenceEquals的區別是什么

本篇文章為大家展示了Equals、==和RefrenceEquals的區別是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創新互聯是一家集網站建設,拜泉企業網站建設,拜泉品牌網站建設,網站定制,拜泉網站建設報價,網絡營銷,網絡優化,拜泉網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

我們這里將簡單對比Equals、==和RefrenceEquals的區別,我們將從引用類型的比較以及類型來進行分析。

今天無意看到一篇有關Equals和==的區別的帖子,帖子中間簡單的說成是比較引用和比較值,這樣的理解很有問題。

看了看MSDN,總結如下。

從兩個方面來說說這三者的區別。

先給出一個類和一個結構:

public class RefrenceClass      {          public int X          {get;set;}                    public string Y          {get;set;}      }            public struct ValueStruct      {          public int x;          public string y;      }

1.引用類型的比較

看看以下這段代碼會輸出何種結果

RefrenceClass c1 = new RefrenceClass();              c1.X = 1;              c1.Y = "OK";              RefrenceClass c2 = new RefrenceClass();              c2.X = 1;              c2.Y = "OK";              RefrenceClass c3 = new RefrenceClass();              c3.X = 1;              c3.Y = "OK!";              RefrenceClass c4 = new RefrenceClass();              c4.X = 2;              c4.Y = "OK";              RefrenceClass c5 = new RefrenceClass();              c5=c1;              c5.X = 2;              RefrenceClass c6 = c1;              Console.WriteLine(ReferenceEquals(c1,c2).ToString());              Console.WriteLine(ReferenceEquals(c1,c3).ToString());              Console.WriteLine(ReferenceEquals(c1,c4).ToString());              Console.WriteLine(ReferenceEquals(c1,c5).ToString());              Console.WriteLine(ReferenceEquals(c1,c6).ToString());              Console.WriteLine();              Console.WriteLine(Equals(c1,c2).ToString());              Console.WriteLine(Equals(c1,c3).ToString());              Console.WriteLine(Equals(c1,c4).ToString());              Console.WriteLine(Equals(c1,c5).ToString());              Console.WriteLine(Equals(c1,c6).ToString());              Console.WriteLine();              Console.WriteLine(c1.Equals(c2).ToString());              Console.WriteLine(c1.Equals(c3).ToString());              Console.WriteLine(c1.Equals(c4).ToString());              Console.WriteLine(c1.Equals(c5).ToString());              Console.WriteLine(c1.Equals(c6).ToString());              Console.WriteLine();              Console.WriteLine(c1==c2);              Console.WriteLine(c1==c3);              Console.WriteLine(c1==c4);              Console.WriteLine(c1==c5);              Console.WriteLine(c1==c6);              Console.WriteLine();c1,c2,c3,c4為不同的實例,c1,c5,c6是同一個引用

返回的結果都是 前三個比較為false,后兩個為true

由結果看,靜態RefrenceEquals、靜態Equals、虛擬Equals和==比較的都是引用地址

而當我們換成比較Struct的時候,靜態RefrenceEquals的結果均為false,靜態Equals、虛擬Equals的結果為true,false,false,false,true,==不可用在此處由這個結果看靜態Equals、虛擬Equals比較的是值

這就和我們上面得出的結果不一樣了,那到底比較的是什么呢?

我們按類型來分析:

1.靜態RefrenceEquals,從方法名也可以看出比較的是引用地址,在對值類型進行此比較時,始終為false,即使是RefrenceEauals(1,1),因為這里它把值首先裝箱再進行比較,所以兩個的引用地址是不一樣的,但是RefrenceEquals(null,null)的值是true;

2.靜態Equals方法,這個方法其實最終是調用了虛擬Equals方法的不同重載

3.虛擬Equals方法,可在不同類中重載,這里我們就可以理解為什么上面的兩種不同類型變量的比較會有不同的結果了,比如String.Equals方法就是用于判斷兩個字符串的內容是否相等

一般來說,對于值類型,類型相同,并且數值相同(對于struct的每個成員都必須相同),則Equals返回true,否則返回false。而對于引用類型,默認的行為與ReferenceEquals的行為相同,僅有兩個對象指向同一個Reference的時候才返回true。靜態Equals相比虛擬Equals方法有一個優點,就在于它不用考慮比較的對象是否為null;

4.==運算符,對于內置的值類型,直接判斷兩個對象的值是否相等,并會根據需要對對象進行類型轉換,對于用戶定義的值類型,比如struct,不可使用;杜宇引用類型,默認的行為與ReferenceEquals的行為相同,但是很多類對==進行了重載,比如String。

上述內容就是Equals、==和RefrenceEquals的區別是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。

網站名稱:Equals、==和RefrenceEquals的區別是什么
網頁URL:http://m.kartarina.com/article32/jeohsc.html

成都網站建設公司_創新互聯,為您提供網站維護移動網站建設手機網站建設網站排名搜索引擎優化App設計

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站建設
主站蜘蛛池模板: 麻豆aⅴ精品无码一区二区| 国产色爽免费无码视频| 18精品久久久无码午夜福利| 色综合久久久久无码专区| 亚洲欧洲国产综合AV无码久久| 免费无码成人AV片在线在线播放| 国产成人无码综合亚洲日韩 | AV无码免费永久在线观看| 四虎成人精品国产永久免费无码 | 久久人妻无码一区二区| 亚洲AV无码成人专区片在线观看| 蜜臀亚洲AV无码精品国产午夜.| 久久亚洲精品AB无码播放| 精品久久久无码中字| 亚洲AV永久无码精品网站在线观看| 国产AV无码专区亚洲AV男同| 久久久久久亚洲av无码蜜芽| 色情无码WWW视频无码区小黄鸭| 中文无码vs无码人妻| 国外AV无码精品国产精品| 亚洲日韩国产二区无码 | 亚洲6080yy久久无码产自国产| 国产精品无码av在线播放| 中文成人无码精品久久久不卡 | 国产成人无码综合亚洲日韩| 国产精品无码免费专区午夜| 性色AV无码中文AV有码VR| 国产丰满乱子伦无码专| 无码国产精成人午夜视频不卡| 久久久久亚洲AV无码专区首JN| 毛片免费全部播放无码| 潮喷大喷水系列无码久久精品| 无码人妻丰满熟妇区BBBBXXXX| 无码人妻AⅤ一区二区三区| 中文字幕丰满乱子伦无码专区| 熟妇人妻中文a∨无码| 亚洲人成无码网站| 亚洲av无码不卡| 久久精品aⅴ无码中文字字幕不卡| 国产在线无码一区二区三区视频| 亚洲精品无码mv在线观看网站|