【.net 基础01】ReferenceEquals,Equals,==的区别
【Code】
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】
1.ReferenceEquals用于比较引用类型。
2.如果比较的是值类型(会自动装箱),则返回false。
【Equals】
1.Equals用于比较值类型和引用类型。
2.可以被子类重写。
3.如果不重写Equals方法,Equals方法效果与==一样,引用类型比较引用,值类型比较值。
4.如果重写Equals方法,需要重写GetHashcode方法,当该类作为键值对的键时,需要唯一的Hashcode,所以此时的GetHashcode方法需要被重写。
【==】
1.Equals用于比较值类型和引用类型。
2.引用类型比较引用,值类型比较值。
请注明文章出处[http://www.cnblogs.com/fb-boy/]