<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>