C#中Equals和==的比较
?一、值類型的比較
? 對(duì)于值類型來說? 兩者比較的都是”內(nèi)容”是否相同,即?值 是否一樣,很顯然此時(shí)兩者是劃等號(hào)的。
int i = 9;int j = 9; Console.WriteLine("i==j"+(i==j)); //true Console.WriteLine("i.Equals(j)"+(i.Equals(j))); //true? 二、引用類型的比較
??對(duì)于引用類型來說,等號(hào)(==)比較的是兩個(gè)變量的”引用”?是否一樣,即是引用的”地址”是否相同。而對(duì)于equals來說仍然比較的是變量的??”內(nèi)容”?是否一樣。
? 1、字符串的比較
string s1 = "abc";string s2 = "abc"; Console.WriteLine("s1==s2"+(s1==s2));//true Console.WriteLine("s1.Equals(s2)"+(s1.Equals(s2)));//true??string是微軟封裝的一個(gè)字符串類,在內(nèi)部他已經(jīng)對(duì) = = 操作符進(jìn)行了重寫。重寫后他比較的則是兩個(gè)變量的內(nèi)容是否相同,重寫后的 = = 操作符內(nèi)部調(diào)用的即是 equals 方法,所以輸出的是true
??2、 自定義的其他引用類型——一 person類為例
Person p1 = new Person("aa",18); Person p2 = new Person("aa",18); Console.WriteLine("p1==p2"+(p1==p2));//false Console.WriteLine("p1.Equals(p2)"+p1.Equals(p2));//false? 對(duì)于 p1==p2 比較的結(jié)果是false,這點(diǎn)是毫無疑問的,因?yàn)樗麄z是兩個(gè)不同的變量,所以引用的地址也是不同的。但是對(duì)于p1.Equals(p2) 返回false,可能有人會(huì)產(chǎn)生疑問,p1 和p2的內(nèi)容是相同的啊,為什么他倆的比較結(jié)果卻是為false呢?。原因就在于在Equals是Object中的一個(gè)虛方法,而person類中沒有對(duì)她進(jìn)行重寫,因此此時(shí)調(diào)用的仍是父類中的Equals方法。但是父類是無法知道你都有哪些成員字段的,因此返回的是false。要想讓他能夠比較兩個(gè)變量的內(nèi)容是否相同,那就應(yīng)該重寫Equals方法
public override bool Equals(object obj){Person p = (Person)obj; return (this.Name == p.Name) && (this.Age == p.Age); }??總結(jié):Equals比較的永遠(yuǎn)是變量的內(nèi)容是否相同,而= =比較的則是引用地址是否相同(前提:此種類型內(nèi)部沒有對(duì)Equals 或= = 進(jìn)行重寫操作,否則輸出可能會(huì)有不同)。string 類型是個(gè)特例,因?yàn)樗膬?nèi)部對(duì)這兩個(gè)都進(jìn)行了重寫。
轉(zhuǎn)載于:https://www.cnblogs.com/dotnetHui/p/8663823.html
總結(jié)
以上是生活随笔為你收集整理的C#中Equals和==的比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知识管理系列---3.程序实现
- 下一篇: 面试:Handler 的工作原理是怎样的