1. 程式人生 > >C#中的equals()和==

C#中的equals()和==

字符 using ace read true names ati 以及 args

using System;

namespace EqualsTest
{
    class EqualsTest
    {
        static void Main(string[] args)
        {
            //值類型
            int x = 1;
            int y = 1;
            Console.WriteLine(x == y);//True
            Console.WriteLine(x.Equals(y));//True             

            //引用類型
            A a = new
A(); B b = new B(); //Console.WriteLine(a==b);//報錯 Console.WriteLine(a.Equals(b));//False //字符串(最像值類型的引用類型) string m = "1"; string n = "1"; Console.WriteLine(m==n);//True Console.WriteLine(m.Equals(n));//True
//結構體(最像引用類型的值類型) T t = new T(); V v = new V(); //Console.WriteLine(t == v);//報錯 Console.WriteLine(t.Equals(v));//True Console.Read(); } } class A { public int X = 1; } class B { public int X = 1; } struct T { int X; }
struct V { int X; } }

總結:

①兩個“相同”的值類型不管是equals()還是==都返回True,兩個“相同”的值類型不管是equals()還是==都返回False。

②上面這句話並不完全正確,因為值類型中有個特例:結構體;引用類型中也有個特例:字符串。

③除字符串之外的引用類型,以及結構體,根本不能用==去對比,編譯就會報錯。

C#中的equals()和==