【Code】spa
class Program { static void Main(string[] args) { object A = new Person { Name = "jack" }; object B = new Person { Name = "jack" }; int i1 = 1; int i2 = 1; /* * ReferenceEquals比较的是引用类型 */ // 两个参数会自动装箱,--引用不一样,false Console.WriteLine(ReferenceEquals(i1, i2)); // 引用不一样,false Console.WriteLine(ReferenceEquals(A, B)); /* * 若是Person类不重写Equals方法,Equals方法效果与==同样 */ // 引用类型,引用不一样,false Console.WriteLine(A.Equals(B)); // 值类型,值相同,true Console.WriteLine(i1.Equals(i2)); // 引用不一样,false Console.WriteLine(A == B); // 值类型,值相同,true Console.WriteLine(i1 == i2); Console.Read(); } } class Person { internal string Name; }
【ReferenceEquals】code
1.ReferenceEquals用于比较引用类型。blog
2.若是比较的是值类型(会自动装箱),则返回false。string
【Equals】it
1.Equals用于比较值类型和引用类型。class
2.能够被子类重写。object
3.若是不重写Equals方法,Equals方法效果与==同样,引用类型比较引用,值类型比较值。引用
4.若是重写Equals方法,须要重写GetHashcode方法,当该类做为键值对的键时,须要惟一的Hashcode,因此此时的GetHashcode方法须要被重写。方法
【==】static
1.Equals用于比较值类型和引用类型。
2.引用类型比较引用,值类型比较值。