.Net 【基礎回顧】比較比較 Equals ReferenceEquals
阿新 • • 發佈:2022-03-31
物件一致和物件相等
-
物件一致/the same instance:兩個物件是一個例項,引用相同
-
物件相等/considered equal:指兩個物件的值相同,但引用不一定相同
比較運算子==
-
引用型別,預設是比較引用的
-
值型別預設比較值
-
string 比較值
Object
中的例項方法Equals
-
虛方法,需要子類繼承重寫,預設實現還是比較兩者是否為同一個引用
-
所有值型別的基類System.ValueType中重寫了該方法,用來比較值相等
-
string 比較值相等
Object.Equals(left, right)
靜態方法
considered equal
-
引用相同,必定相等
-
只有一個null,必定不等
-
都不是null,且不是同一個引用,根據left的例項Equals方法判斷
-
都是null返回true
public static bool Equals(object left, object right) { if(object.ReferenceEquals(left,right)) //如果引用相同,則必定相等(包含兩個都是null的情況) { return true; } if(object.ReferenceEquals(left ,null)|| object.ReferenceEquals(null,right)) //若只有一個是null,則必定不等 { return false; } return left.Equals(right);//兩個都不是null,且也不是同一個引用,則根據left的例項Equals方法來判斷。 }
Object.ReferenceEquals(left, right)
靜態方法
the same instance
-
比較兩者是否是相同的引用
-
不能重寫
-
值型別物件的比較永遠返回false
-
兩個null的比較永遠返回true