真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Equals、==和RefrenceEquals的區(qū)別是什么

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

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),拜泉企業(yè)網(wǎng)站建設(shè),拜泉品牌網(wǎng)站建設(shè),網(wǎng)站定制,拜泉網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,拜泉網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

我們這里將簡(jiǎn)單對(duì)比Equals、==和RefrenceEquals的區(qū)別,我們將從引用類(lèi)型的比較以及類(lèi)型來(lái)進(jìn)行分析。

今天無(wú)意看到一篇有關(guān)Equals和==的區(qū)別的帖子,帖子中間簡(jiǎn)單的說(shuō)成是比較引用和比較值,這樣的理解很有問(wèn)題。

看了看MSDN,總結(jié)如下。

從兩個(gè)方面來(lái)說(shuō)說(shuō)這三者的區(qū)別。

先給出一個(gè)類(lèi)和一個(gè)結(jié)構(gòu):

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

1.引用類(lèi)型的比較

看看以下這段代碼會(huì)輸出何種結(jié)果

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為不同的實(shí)例,c1,c5,c6是同一個(gè)引用

返回的結(jié)果都是 前三個(gè)比較為false,后兩個(gè)為true

由結(jié)果看,靜態(tài)RefrenceEquals、靜態(tài)Equals、虛擬Equals和==比較的都是引用地址

而當(dāng)我們換成比較Struct的時(shí)候,靜態(tài)RefrenceEquals的結(jié)果均為false,靜態(tài)Equals、虛擬Equals的結(jié)果為true,false,false,false,true,==不可用在此處由這個(gè)結(jié)果看靜態(tài)Equals、虛擬Equals比較的是值

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

我們按類(lèi)型來(lái)分析:

1.靜態(tài)RefrenceEquals,從方法名也可以看出比較的是引用地址,在對(duì)值類(lèi)型進(jìn)行此比較時(shí),始終為false,即使是RefrenceEauals(1,1),因?yàn)檫@里它把值首先裝箱再進(jìn)行比較,所以?xún)蓚€(gè)的引用地址是不一樣的,但是RefrenceEquals(null,null)的值是true;

2.靜態(tài)Equals方法,這個(gè)方法其實(shí)最終是調(diào)用了虛擬Equals方法的不同重載

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

一般來(lái)說(shuō),對(duì)于值類(lèi)型,類(lèi)型相同,并且數(shù)值相同(對(duì)于struct的每個(gè)成員都必須相同),則Equals返回true,否則返回false。而對(duì)于引用類(lèi)型,默認(rèn)的行為與ReferenceEquals的行為相同,僅有兩個(gè)對(duì)象指向同一個(gè)Reference的時(shí)候才返回true。靜態(tài)Equals相比虛擬Equals方法有一個(gè)優(yōu)點(diǎn),就在于它不用考慮比較的對(duì)象是否為null;

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

上述內(nèi)容就是Equals、==和RefrenceEquals的區(qū)別是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享文章:Equals、==和RefrenceEquals的區(qū)別是什么
新聞來(lái)源:http://weahome.cn/article/jeohsc.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部