天天看點

C#中對象的四種相等比較方式

<b>C#中對象的四種相等比較方式如下:</b>

1.ReferenceEquals(object o1, object o2):比較兩個對象的引用,引用相同傳回true,否則傳回false,同為null是傳回true;

2.Equals(object o):虛拟Equals方法,比較引用,可以重寫比較值;

3.Equals(object o1, object o2):靜态Equals方法,先判斷兩個對象是否為空,如果都不為空,則調用虛拟Equals方法;

4.object1 == object2:比較運算符,比較引用,可以重寫;

注意:值類型比較時應采用重寫後的Equals方法,使用ReferenceEquals進行值類型比較時總是傳回false,因為兩個值類型需要分别裝箱到對象中,是不同的引用

TestEquals.cs:

<b>01.using System; </b>

<b>02.  </b>

<b>03.namespace Magci.Test.Operators </b>

<b>04.{ </b>

<b>05.    public class SomeClass </b>

<b>06.    { </b>

<b>07.          </b>

<b>08.    } </b>

<b>09.  </b>

<b>10.    public class TestEquals </b>

<b>11.    { </b>

<b>12.        public static void Main() </b>

<b>13.        { </b>

<b>14.            SomeClass s1 = new SomeClass(); </b>

<b>15.            SomeClass s2 = new SomeClass(); </b>

<b>16.            SomeClass s3 = s1; </b>

<b>17.  </b>

<b>18.            //ReferenceEquals比較兩個對象的引用,同為null是傳回true </b>

<b>19.            Console.WriteLine("ReferenceEquals(s1, s2) : " + ReferenceEquals(s1, s2)); </b>

<b>20.            Console.WriteLine("ReferenceEquals(null, null) : " + ReferenceEquals(null, null)); </b>

<b>21.            Console.WriteLine("ReferenceEquals(s1, null) : " + ReferenceEquals(s1, null)); </b>

<b>22.              </b>

<b>23.            //虛拟Equals方法,比較引用,可以重寫比較值 </b>

<b>24.            Console.WriteLine("s1.Equals(s2) : " + s1.Equals(s2)); </b>

<b>25.            Console.WriteLine("s1.Equals(s3) : " + s1.Equals(s3)); </b>

<b>26.              </b>

<b>27.            //靜态Equals方法先比較兩個對象是否為空,如果都不為空,則調用虛拟Equals方法 </b>

<b>28.            Console.WriteLine("SomeClass.Equals(s1, s2) : " + SomeClass.Equals(s1, s2)); </b>

<b>29.            Console.WriteLine("SomeClass.Equals(null, null) : " + SomeClass.Equals(null, null)); </b>

<b>30.            Console.WriteLine("SomeClass.Equals(s1, null) : " + SomeClass.Equals(s1, null)); </b>

<b>31.              </b>

<b>32.            //比較運算符比較引用,可以重寫 </b>

<b>33.            Console.WriteLine("s1 == s2 : " + (s1 == s2)); </b>

<b>34.            Console.WriteLine("s1 == s3 : " + (s1 == s3)); </b>

<b>35.  </b>

<b>36.            //值類型比較 </b>

<b>37.            Console.WriteLine("1.Equals(1) : " + 1.Equals(1)); </b>

<b>38.            //ReferenceEquals進行值類型比較時總是傳回false,因為兩個值類型需要分别裝箱到對象中,是不同的引用 </b>

<b>39.            Console.WriteLine("ReferenceEquals(1, 1) : " + ReferenceEquals(1, 1)); </b>

<b>40.        } </b>

<b>41.    } </b>

<b>42.}</b>

<b></b>

<b>     本文轉自My_King1 51CTO部落格,原文連結:http://blog.51cto.com/apprentice/1360722</b><b>,如需轉載請自行聯系原作者</b>