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 }