Example #1
0
        static void Main(string[] args)
        {
            // Numeric
            Console.WriteLine((2 + 2) == 4);
            // True : 这里比较的是值相等

            // Referenc
            object s = 1;
            object t = 1;
            Console.WriteLine(s == t);
            // False : 这里比较的是引用相等
            Console.WriteLine(s.Equals(t).ToString());
            // True : 这里比较的是值相等

            string peom1 = "Kubla Khan";
            string peom2 = "Kubla Khan";
            string peom3 = String.Copy(peom2);

            Console.WriteLine(peom1 == peom2);
            // True : string比较特殊,很多方法被重写,这里比较的是值相等,即内容相等
            Console.WriteLine(peom1 == peom3);
            // True
            Console.WriteLine(ReferenceEquals(peom1, peom3));
            // False : ReferenceEquals()判断两个字符串是否指向相同的内存地址
            Console.WriteLine((object)peom1 == (object)peom2);
            // True : 这里的peom1和peom2的值相同,编译器认为peom1和peom2指向同一个引用

            Console.WriteLine(String.Equals(peom1, peom2));
            // True : 先判断两个字符串是否有相同的内存位置,否则逐字符比较两个字符串是否相等
            Console.WriteLine(String.Equals(peom1, peom3));
            // True

            string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
            string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
            Console.WriteLine(a == b);
            // True
            Console.WriteLine(a.Equals(b));
            // True

            object g = a;
            object h = b;
            Console.WriteLine(g == h);
            // False
            Console.WriteLine(g.Equals(h));
            // True

            Person p1 = new Person("jia");
            Person p2 = new Person("jia");
            Console.WriteLine(p1 == p2);
            // False
            Console.WriteLine(p1.Equals(p2));
            // False

            Person p3 = new Person("jia");
            Person p4 = p3;
            Console.WriteLine(p3 == p4);
            // True
            Console.WriteLine(p3.Equals(p4));
            // True
        }