成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡單對比Equals、==和RefrenceEquals的區(qū)別

開發(fā) 后端
在這里我們將介紹簡單對比Equals、==和RefrenceEquals的區(qū)別,希望能對大家有所幫助。

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

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

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

從兩個方面來說說這三者的區(qū)別。

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

  1. public class RefrenceClass  
  2.     {  
  3.         public int X  
  4.         {get;set;}  
  5.           
  6.         public string Y  
  7.         {get;set;}  
  8.     }  
  9.       
  10.     public struct ValueStruct  
  11.     {  
  12.         public int x;  
  13.         public string y;  
  14.     } 

1.引用類型的比較

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

  1. RefrenceClass c1 = new RefrenceClass();  
  2.             c1.X = 1;  
  3.             c1.Y = "OK";  
  4.             RefrenceClass c2 = new RefrenceClass();  
  5.             c2.X = 1;  
  6.             c2.Y = "OK";  
  7.             RefrenceClass c3 = new RefrenceClass();  
  8.             c3.X = 1;  
  9.             c3.Y = "OK!";  
  10.             RefrenceClass c4 = new RefrenceClass();  
  11.             c4.X = 2;  
  12.             c4.Y = "OK";  
  13.             RefrenceClass c5 = new RefrenceClass();  
  14.             c5=c1;  
  15.             c5.X = 2;  
  16.             RefrenceClass c6 = c1;  
  17.             Console.WriteLine(ReferenceEquals(c1,c2).ToString());  
  18.             Console.WriteLine(ReferenceEquals(c1,c3).ToString());  
  19.             Console.WriteLine(ReferenceEquals(c1,c4).ToString());  
  20.             Console.WriteLine(ReferenceEquals(c1,c5).ToString());  
  21.             Console.WriteLine(ReferenceEquals(c1,c6).ToString());  
  22.             Console.WriteLine();  
  23.             Console.WriteLine(Equals(c1,c2).ToString());  
  24.             Console.WriteLine(Equals(c1,c3).ToString());  
  25.             Console.WriteLine(Equals(c1,c4).ToString());  
  26.             Console.WriteLine(Equals(c1,c5).ToString());  
  27.             Console.WriteLine(Equals(c1,c6).ToString());  
  28.             Console.WriteLine();  
  29.             Console.WriteLine(c1.Equals(c2).ToString());  
  30.             Console.WriteLine(c1.Equals(c3).ToString());  
  31.             Console.WriteLine(c1.Equals(c4).ToString());  
  32.             Console.WriteLine(c1.Equals(c5).ToString());  
  33.             Console.WriteLine(c1.Equals(c6).ToString());  
  34.             Console.WriteLine();  
  35.             Console.WriteLine(c1==c2);  
  36.             Console.WriteLine(c1==c3);  
  37.             Console.WriteLine(c1==c4);  
  38.             Console.WriteLine(c1==c5);  
  39.             Console.WriteLine(c1==c6);  
  40.             Console.WriteLine();c1,c2,c3,c4為不同的實例,c1,c5,c6是同一個引用 

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

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

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

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

我們按類型來分析:

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

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

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

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

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

原文標題:Equals、RefrenceEquals和==的區(qū)別

鏈接:http://www.cnblogs.com/solsolsol/archive/2009/09/17/1568421.html

【編輯推薦】

  1. 簡述C# XML解析方法的特點及應(yīng)用
  2. .NET對象的XML序列化和反序列化概念淺析
  3. .NET對象的XML序列化和反序列化實例詳解
  4. C# XML序列化實例淺析
  5. .NET序列化和反序列化基礎(chǔ)知識總結(jié)
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2011-06-28 10:34:54

==equals

2023-10-12 08:25:18

Javaequals內(nèi)存

2024-03-19 14:41:08

C#操作符開發(fā)

2020-07-01 07:44:06

javaSE==equals

2023-12-15 09:21:17

ObjectJavaString

2009-06-30 13:38:37

SERVLET和JSP

2024-03-07 13:30:44

Java對象true

2020-11-02 11:33:52

ReactVue應(yīng)用

2020-10-23 07:43:31

String

2021-12-20 09:53:51

用戶態(tài)內(nèi)核態(tài)應(yīng)用程序

2010-06-21 10:35:30

LinuxDeepin

2011-06-30 21:33:16

噴墨打印機常見問題

2011-03-23 17:11:21

Lampwamp

2018-01-19 12:33:17

數(shù)據(jù)庫OracleMySQL

2009-09-01 13:07:23

雪豹蘋果操作系統(tǒng)

2011-08-16 16:22:38

MySQL數(shù)據(jù)庫存儲引擎MyISAM

2010-09-25 13:20:22

DHCP BOOTP

2010-08-05 14:36:47

WorkFlow

2009-10-23 16:15:41

2009-11-03 14:13:23

VB.NET C#
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲成人av| 免费激情av | 亚洲高清视频一区 | 2023亚洲天堂 | 久久精品视频在线观看 | av中文天堂 | 久久久成人免费视频 | 黄色在线观看网址 | 四虎影院在线播放 | 成人免费网视频 | 精品天堂| 一区二区三区日 | 久草精品视频 | 久久久91精品国产一区二区三区 | 99精品久久99久久久久 | 日韩超碰在线 | 日本a网站 | 亚洲人成在线观看 | 精品一区二区电影 | 日本一道本 | 国产欧美一区二区三区在线看蜜臀 | 日韩欧美中文 | 一级黄a| 国产成人福利视频在线观看 | 日韩在线视频观看 | 精精国产xxxx视频在线 | 日韩欧美一区二区三区免费观看 | 一区二区在线不卡 | 永久av| 久久网一区二区三区 | 天堂亚洲网 | 国产乱肥老妇国产一区二 | 精品一二区| 91xxx在线观看 | 国户精品久久久久久久久久久不卡 | 玖玖在线精品 | 九九视频在线观看 | 91.com在线观看 | 日韩av在线一区 | 91看片| 亚洲国产成人精品女人久久久 |